zoukankan      html  css  js  c++  java
  • Azure 基础:用 PowerShell 自动发布 CloudServices

    在软件的开发过程中,自动化的编译和部署能够带来很多的优势。下面我们聊聊如何自动发布云应用程序到 azure 上的 cloud services。

    打包要发布的内容

    首先使用 msbuild 编译 *.ccproj 文件,我们需要使用生成产物中的:
    app.publishxxx.cspkg
    app.publishyyy.cscfg

    下载 publishsettings 文件

    使用你的 Azure 账号登录下面的地址,就可以下载 publishsettings 文件(国际版):
    https://manage.windowsazure.com/publishsettings/index

    下载到的文件的名字大概是这个样子:
    xxx1-31-2017-credentials.publishsettings
    前面的 xxxx 是你的 subscription 名称。

    另一种方法是使用 powershell 命令 Get-AzurePublishSettingsFile 下载 publishsettings 文件,过程和上面差不多。

    安装powershell的azure module

    访问 https://azure.microsoft.com/en-us/downloads/#cmd-line-tools, 点击 “Command-line tools->PowerShell” 下面的 “Windows install” 下载安装包。
    运行安装包,安装 azure modules。

    创建自动发布的脚本

    导入 azure module

    Import-Module Azure

    设置脚本中使用的变量

    $package = app.publishxxx.cspkg
    $configuration = app.publishyyy.cscfg
    # subscription 名称
    $subscription = "your subscription name";
    # service 名称
    $service = "your service name";
    # storage account
    $storage = "your storage account";
    # slot 名称,一般会先发到 staging中,检查后再进行切换
    $slot = "Staging";
    # 为每次发布提供一个说明信息
    $deploymentLabel = “your demplyment label”

    导入 publish settings

    publish settings 文件中记录了 subscription 信息以及用于登录的验证信息,所以先要把这些信息导入进来。
    Import-AzurePublishSettingsFile publishsettings-file-path

    最好在导入前能够先检查一下,看这个文件对应的 subscription 是不是已经被导入过了。

    $thisSubscriptionExist = $False
    $subs = Get-AzureSubscription
    if($subs.Count -gt 0)
    {
        Foreach ($sub in $subs)
        {
            if($sub.SubscriptionName -eq $subscription)
            {
                $thisSubscriptionExist = $True
            }
        }
    }

    如果不存在才执行导入操作,否则直接进行下一步就行了。

    if(!$thisSubscriptionExist)
    {
        Import-AzurePublishSettingsFile $subscriptionSetting
        // 为subscription 添加一个storage account
        Set-AzureSubscription -CurrentStorageAccount $storage -SubscriptionName $subscription
    }

    设置当前的 subscription

    从上一步中我们可以发现,你机器上可能同时保存了多个 subscription 的信息。那么当我们执行发布操作时,默认会使用哪个 subscription 的信息呢?这里有一个当前 subscription 的概念,发布操作会使用当前 subscription 的信息进行发布。因此在发布操作之前一定要设置本次发布使用的 subscription 为当前 subscription。
    Select-AzureSubscription -SubscriptionName $subscription –Current

    检查 deployment 是否存在

    在执行部署前需要先检查 deployment 是否存在,这会影响到后面的部署方式。如果 deployment 不存在,执行 New-AzureDeployment 命令。如果 deployment 已经存在,执行 Set-AzureDeployment 命令。

    $deployment = Get-AzureDeployment -ServiceName $service -Slot $slot -ErrorVariable a -ErrorAction silentlycontinue
    if ($deployment.Name -ne $null)
    {
        # deployment已经存在,使用Set-AzureDeployment命令进行更新。
    }
    else
    {
        # 需要使用New-AzureDeployment命令新建 deployment
    }

    新建 deployment

    New-AzureDeployment -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service;
    $completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;
    //检查部署是否成功
    $completeDeploymentID = $completeDeployment.deploymentid;

    更新已经存在的部署

    Set-AzureDeployment -Upgrade -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service -Force;
    $completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;
    //检查部署是否成功
    $completeDeploymentID = $completeDeployment.deploymentid;

    从网站上查看发布结果

    发布完成后,我们也可以从网站上查看一下发布的结果。

    Deployment label 是我们在发布脚本中设置的,一般会写入发布日期和版本号。
    Deployment ID 是标识本次部署的 GUID。

    总结,powershell 的 azure 模块已经提供了很完善的命令供我们进行自动化的发布使用,我们只要把这些命令组织成脚本就可以了。

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/sparkdev/p/6358987.html
Copyright © 2011-2022 走看看