標題:如何將Azure DevOps中的代碼發布到Azure App Service中
作者:Lamond Lu
背景
最近做了幾個項目一直在用Azure DevOps和Azure App Service, 每次都要從零開始搭建從Azure DevOps向Azure App Service發布代碼的環境,由於步驟比較繁瑣,每次都會忘記其中幾個步驟,所以在此總結一下,已備后續再次使用。
Azure DevOps和Azure App Service
Azure DevOps
Azure DevOps其實就是以前的Visutal Studio Team Services Online, 提供了項目管理和源代碼管理的功能。你可以將項目源代碼代碼托管到Azure DevOps,並使用它的Build Pipeline將代碼發布指定的服務器或者App Service中。
Azure App Service
App Service使用Azure中的一種重要服務,用戶使用它可以快速構建、部署和縮放在任何平台上運行的企業級Web應用、移動應用和API應用。當你需要部署項目的時候,你不需要搭建任何環境,只需要將代碼發布到App Service即可, Azure會為你准備好程序運行的環境。
另外App Service提供了許多運維的功能,比如備份,縮放,日志,你只需要進行簡單配置就可實現許多復雜的功能。
如何將Azure DevOps中的代碼發布到Azure App Service中?
為了演示如何將Azure DevOps中的代碼發布到Azure App Service中,我們首先在Azure DevOps中創建一個新的代碼庫,代碼庫中只有一個index.html文件,代碼如下
<html>
<head></head>
<body>Hello World!</body>
</html
第一步:添加一個Azure App Service
為了部署我們的項目,我們首先需要在Azure Portal中創建一個App Service.
這里我們將當前Web應用起名為LamondTest, 后續我們就可以使用http://LamondTest.azurewebsites.net的域名來訪問我們的應用。
第二步: 在Azure AD中添加一個App Registration
為了將Azure Devops中的代碼發布到Azure App Service中,我們需要在Azure AD中注冊一個App。
我們可以從左側菜單中選擇Azure AD, 然后選擇App Registration, 你就能看到如下頁面
點擊+New application registration
這里我給這個Application命名為DeploymentApp, 然后Application type選擇Web app / API。
因為我們這個Application只是來輔助發布項目的,所以Sign-on URL對我們不是很重要,所以我就隨便用了度娘的URL.
創建成功之后,你會看到一下界面
這里比較重要的是Application ID, 你需要將它記下來,以便后續操作使用
第二步:創建訪問應用使用的Key
如果你完成上一步操作之后,不要關閉面板,繼續點擊面板中的Settings按鈕。
選擇API ACCESS -> Keys
添加一個TestKey, 並設置永不過期,Value值可以任何設置一個,保存之后這個Value值保存成一串密鑰,這里這串密鑰需要保存一下,以備后續使用。
第三歩: 為DeploymentApp分配Contributor角色
為了借助DeploymentApp發布代碼,我們需要將LamondTest這個App Service的Contributor角色分配給DeploymentApp.
這里我們可以通過LamondTest -> Access Control(IAM) -> Add role assignment添加角色,並保存
第四步:獲取TenantId和SubscriptionId
除了前面的Application ID和密鑰,我們還需要找到當前Azure的Tenant Id和Subscription Id
Tenant Id
我們可以從 Azure Active Directory -> Properties 中查找到Directory ID, 這里Directory ID即我們所需的Tenant Id
Subscription Id
Subscription Id,即訂閱Id, 我們可以在Subscription模塊中找到它
第五步:創建Azure Resource Manager
前面四步都是在Azure Portal中的操作,后面的所有操作都是在Azure DevOps中來操作
首先我們需要來添加Azure Resource Manager, 我們可以通過Project Settings -> Service connections -> +New service connections -> Azure Resource Manager來打開添加界面
點擊use the full version of the service connection dialog
這里Subscription ID和Tenant ID就是第四步中獲取到的2個ID,Service principal client ID和Service principal key分別就是第二步中的Application ID和密鑰。
注意:這里Subscription name必須輸入正確,通常來說都是Pay-As-You-Go, 如果不同,你可以根據你自己的Azure Subscription name來替換。
這里我將這個連接命名為LamondTestConnection。
點擊OK之前我們可以通過Verify connection來嘗試連接,連接成功會返回一個Verified狀態圖標
第六步:創建Build Pipeline
當前面操作都完成之后,我們就可以開始創建Build Pipleline了
我們可以通過Pipelines -> Builds -> New Pipeline打開添加Build Pipleline界面。
這里我們需要選擇代碼來源Azure Repos Git, 然后選擇我們之前創建的源代碼倉儲HelloWorld, 點擊Continue
然后選擇Empty Job
在Pipeline管理頁面中,點擊加號,選擇Azure App Service Deploy
選擇Azure App Service Deploy: LamondTest, 設置Azure subscription為LamondTestConnection, 並選擇App Service name為LamondTest
最后將Package or folder設置為$(System.DefaultWorkingDirectory)
最后點擊Save & Queue, 我們的代碼就會自動發布到之前定義好的App Service中
最后我們使用瀏覽器訪問https://lamondtest.azurewebsites.net/, 網頁代碼就正確顯示了
附加: 啟用持續集成
Azure DevOps的Build Pipeline還支持持續集成,我們可以設置每天定時發布或者每次check-in都觸發代碼發布,我們可以修改剛才創建的Build Pipeline.
在Triggers頁簽中,我們可以啟用Enable continous integration.
在下面的Branch Filter中,你可以設置監控的代碼分支。
現在我們去修改之前的index.html.
<html>
<head></head>
<body>Hello Continuous Integration!</body>
</html
然后簽入代碼。
現在我們返回Azure DevOps的Build Pipleline界面,你會發現代碼開始自動發布了
發布成功之后,我們重新用瀏覽器訪問https://lamondtest.azurewebsites.net/, 新的代碼已經啟用了
這說明我們的代碼持續集成配置成功了。