在軟件的開發過程中,自動化的編譯和部署能夠帶來很多的優勢。如果可以通過一個腳本實現軟件的自動化部署,那么就可以節省大量的時間去做其它事情。
下面介紹如何將雲應用程序通過 PowerShell 自動發布到 azure 的 cloud services 上。
一、打包需要發布的內容
首先使用 msbuild 編譯 *.ccproj 文件,在生成的所有文件中,我們需要用到以下兩個:
app.publish\xxx.cspkg
app.publish\yyy.cscfg
二、下載 publishsettings 文件
有以下兩種方法可以下載 publishsettings 文件:
1、如果沒有 Azure 賬號,則需要先注冊賬號;如果已有 Azure 賬號,可直接登錄下面的地址,下載 publishsettings 文件(國際版):
https://manage.windowsazure.com/publishsettings/index
下載到的文件的文件名:
xxx5-18-2016-credentials.publishsettings
其中xxx是你的 subscription 名稱。
2、在 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。
四、創建自動發布的腳本
1、導入 azure module
在 powershell 中執行命令 Import-Module Azure,導入 azure module
2、設置腳本中使用的變量,其中部分參數變量需要根據自己的信息設定
$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”
3、導入 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
}
4、設置當前的 subscription
從上一步中可以發現,機器上可能同時保存了多個 subscription 的信息。那么,當執行發布操作時,默認會使用哪個 subscription 的信息呢?這里存在“當前 subscription”的概念,發布操作會使用當前 subscription 的信息進行發布。因此,在發布操作之前一定要設置本次發布使用的 subscription 為當前 subscription。
執行 Select-AzureSubscription -SubscriptionName $subscription –Current 命令進行設置
5、檢查 deployment 是否存在
在執行部署前需要先檢查 deployment 是否存在,這會影響到后面的部署方式。如果 deployment 不存在,則需要先建立 deployment。如果 deployment 已經存在,則需要更新 deployment。
命令邏輯如下:
$deployment = Get-AzureDeployment -ServiceName $service -Slot $slot -ErrorVariable a -ErrorAction silentlycontinue
if ($deployment.Name -ne $null)
{
# deployment 已經存在,使用 Set-AzureDeployment 命令進行更新,第7步會詳細說明
}
else
{
# 需要使用 New-AzureDeployment 命令新建 deployment,第6步會詳細說明
}
6、新建 deployment 並檢查部署是否成功的命令
New-AzureDeployment -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service;
$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;
//檢查部署是否成功
$completeDeploymentID = $completeDeployment.deploymentid;
7、更新已經存在的部署並檢查部署是否成功的命令
Set-AzureDeployment -Upgrade -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service -Force;
$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;
//檢查部署是否成功
$completeDeploymentID = $completeDeployment.deploymentid;
8、從網站上查看發布結果
發布完成后,可以從網站上查看發布結果。
其中,Deployment label 是在發布腳本中設置的,一般會寫入發布日期和版本號;Deployment ID 是標識本次部署的 GUID。
總結,PowerShell 的 azure 模塊已經提供了很完善的命令供我們進行自動化的發布使用,我們只需要將這些命令組織成腳本就可以了。


