Title: How to use MSBuild to deploy your .NET Web Application on Azure
前言
對於開發人員來說, routine的事情能夠自動化就自動化, 比如說編譯程式, 或是發布程式等等, 這些自動化之後, 才能將更多的專注力放在程式開發上, 以下就是介紹如何使用
MSBuild
來佈署.NET Framework的程式到Azure App Service上MSBuild
用來佈署.Net framework到Azure 上的工具, 可以透過安裝Visual Studio來獲得, 使用方式如下:
MSBuild <solution的位置>
/p:DeployOnBuild
/p:PublishProfile
/p:Password
/p:Password
MSBuild
需要吃一個Publish Profile才能正常運作, 以下教學將會演示如何編輯Publish Profile, 並且使用
MSBuild
來做編譯以及佈署必要條件
需要安裝Visual Studio
需要在Azure App Service建立服務
需要在Azure App Service建立服務
需要取得佈署帳密(Publish Profile)
需要安裝Azure Cli
需要安裝Azure Cli
az webapp deployment list-publishing-profiles --name YOUR-APP-NAME --resource-group YOUR-RESOURCE-GROUP
Step 1. 下載佈署範本
$appSolutionDeploymentProfile = ".\production.pubxml"
wget https://gist.githubusercontent.com/andy51002000/37a0af3fec1caf2955f109c0b583b3e3/raw/9b2105abd05a304b8ea6045fe78c8de781f4d0a2/publish.pubxml -OutFile $appSolutionDeploymentProfile
Step 2. 開始來編輯Publish Profile的內容
宣告一些變數, 如Subscription Id, Resource Group的名字, 還有App的名字$SubcriptionId = "abcd-abcd-abcd-12312312"
$ResouceGroup = "MyGroup"
$appname = "MyApp"
取得佈署帳密(前提是Azure App Service上已經有開Web App了)
$appUserPWD= $(az webapp deployment list-publishing-profiles --name $appname --resource-group $ResouceGroup --query '[0].{userPWD:userPWD, userName:userName}' -o json | ConvertFrom-Json )
建立物件來暫存更新內容
$profileObj = @{
ResourceId = "/subscriptions/${SubcriptionId}/resourceGroups/${ResouceGroup}/providers/Microsoft.Web/sites/${appname}"
ResourceGroup = ${ResouceGroup}
SiteUrlToLaunchAfterPublish = "http://${appname}.azurewebsites.net"
MSDeployServiceURL = "${appname}.scm.azurewebsites.net:443"
DeployIisAppPath = "${appname}"
UserName = $appUserPWD.userName
}
Step 3. 更新Publish Profile的內容
[xml]$myXML = Get-Content $appSolutionDeploymentProfile
$myXML.Project.PropertyGroup.ResourceId=$profileObj.ResourceId
$myXML.Project.PropertyGroup.ResourceGroup=$profileObj.ResourceGroup
$myXML.Project.PropertyGroup.SiteUrlToLaunchAfterPublish=$profileObj.SiteUrlToLaunchAfterPublish
$myXML.Project.PropertyGroup.DeployIisAppPath=$profileObj.DeployIisAppPath
$myXML.Project.PropertyGroup.UserName=$profileObj.UserName
$myXML.Project.PropertyGroup.MSDeployServiceURL=$profileObj.MSDeployServiceURL
$myXML.Save($appSolutionDeploymentProfile)
Step 4. 最後呼叫MSBuild
$AppSolution="solution的位置"
$MSBuild="MSBuild的位置"
&$MSBuild $AppSolution /p:DeployOnBuild=true /p:PublishProfile=$appSolutionDeploymentProfile /p:Password="$($appUserPWD.userPWD)"
結語
透過MSBuild這個工具, 開發人員可以編譯程式碼以及發布程式到Azure的行為指令化成腳本, 而這些指令化的腳本可以被應用在CI/CD的流程中, 進而使整個開發流程自動化
補充:
有人問說Visual Studio產生出的Publish Profile不是本來就有帶密碼了, 為什麼使用MSBuild的時候還要特別指定密碼
因為密碼會藏在.usr裡, command無法讀取, 所以需要表明密碼
留言
張貼留言