使用 PowerShell 自動化 CloudServices 發佈

在軟件的開發過程當中,自動化的編譯和部署可以帶來不少的優點。若是能夠經過一個腳本實現軟件的自動化部署,那麼就能夠節省大量的時間去作其它事情。shell

下面介紹如何將雲應用程序經過 PowerShell 自動發佈到 azure 的 cloud services 上。windows

1、打包須要發佈的內容app

首先使用 msbuild 編譯 *.ccproj 文件,在生成的全部文件中,咱們須要用到如下兩個:ide

app.publish\xxx.cspkg網站

app.publish\yyy.cscfgui

2、下載 publishsettings 文件this

有如下兩種方法能夠下載 publishsettings 文件:spa

一、若是沒有 Azure 帳號,則須要先註冊帳號;若是已有 Azure 帳號,可直接登陸下面的地址,下載 publishsettings 文件(國際版):orm

https://manage.windowsazure.com/publishsettings/indexblog

下載到的文件的文件名:

xxx5-18-2016-credentials.publishsettings

其中xxx是你的 subscription 名稱。

二、在 powershell 中執行 Get-AzurePublishSettingsFile 命令,實現下載 publishsettings 文件的目的。

3、安裝 powershell 的 azure module

訪問 https://azure.microsoft.com/en-us/downloads/#cmd-line-tools 網址, 點擊 「Command-line tools->PowerShell」 下面的 「Windows install」 下載安裝包。

1

運行安裝包,安裝 azure modules。

4、建立自動發佈的腳本

一、導入 azure module

在 powershell 中執行命令 Import-Module Azure,導入 azure module

二、設置腳本中使用的變量,其中部分參數變量須要根據本身的信息設定

$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 不存在,則須要先創建 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步會詳細說明

}

六、新建 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;

八、從網站上查看發佈結果

發佈完成後,能夠從網站上查看發佈結果。

2

其中,Deployment label 是在發佈腳本中設置的,通常會寫入發佈日期和版本號;Deployment ID 是標識本次部署的 GUID。

 

總結,PowerShell 的 azure 模塊已經提供了很完善的命令供咱們進行自動化的發佈使用,咱們只須要將這些命令組織成腳本就能夠了。

相關文章
相關標籤/搜索