Azure 基礎:用 PowerShell 自動發布 CloudServices


在軟件的開發過程中,自動化的編譯和部署能夠帶來很多的優勢。下面我們聊聊如何自動發布雲應用程序到 azure 上的 cloud services。

打包要發布的內容

首先使用 msbuild 編譯 *.ccproj 文件,我們需要使用生成產物中的:
app.publish\xxx.cspkg
app.publish\yyy.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.publish\xxx.cspkg
$configuration = app.publish\yyy.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 模塊已經提供了很完善的命令供我們進行自動化的發布使用,我們只要把這些命令組織成腳本就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM