使用 Azure Pipelines 部署至 App Service
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
使用 Azure Pipelines,在每次成功建置時自動將 Web 應用程式部署至 Azure App Service。 Azure Pipelines 可讓您使用 Azure DevOps 建置、測試及部署持續整合 (CI) 與持續傳遞 (CD)。
YAML 管線是使用存放庫中的 YAML 檔案來定義。 步驟是管線最小的組建區塊,可以是指令碼或工作 (預先封裝的指令碼)。 了解構成管線的重要概念和元件。
您將使用 Azure Web 應用程式工作來部署至管線中的 Azure App Service。 如需更複雜的案例,例如需要在部署中使用 XML 參數,您可以使用 Azure App Service 部署工作。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- Azure DevOps 組織。 建立免費帳戶。
- 能夠在 Microsoft 裝載的代理程式上執行管線。 您可以購買平行作業,也可以要求免費層。
- 運作中 Azure App Service 應用程式搭配裝載在 GitHub 或 Azure Repos 上的程式碼。
建立管線
本節中的程式碼範例假設您要部署 ASP.NET Web 應用程式。 您可以調整指示以進行其他架構。
深入了解 Azure Pipelines 生態系統支援。
登入您的 Azure DevOps 組織,然後瀏覽至您的專案。
前往 [管線],然後選取 [新增管線]。
先選取 GitHub 作為原始程式碼的位置,以逐步完成精靈的步驟。
系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入您的 GitHub 認證。
在存放庫清單出現時,選取您的存放庫。
系統可能會將您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式。 如果發生此情況,請選取 [核准] & [安裝]。
在 [設定] 索引標籤出現時,選取 [ASP.NET Core]。
在新的管線出現時,請查看 YAML 以了解其用途。 當您準備好時,請選取 [儲存並執行]。
新增 Azure Web 應用程式工作
使用工作助理來新增 Azure Web 應用程式工作。
選取 [Azure Resource Manager] 做為 [連線類型],然後選擇您的 [Azure 訂用帳戶]。 請務必 [授權] 您的連線。
選取 [Linux 上的 Web 應用程式],然後輸入您的
azureSubscription
、appName
和package
。 完成的 YAML 看起來應該像這樣。選取 [Linux 上的 Web 應用程式],然後輸入您的
azureSubscription
、appName
和package
。 完成的 YAML 看起來應該像這樣。variables: buildConfiguration: 'Release' steps: - script: dotnet build --configuration $(buildConfiguration) displayName: 'dotnet build $(buildConfiguration)' - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true - task: AzureWebApp@1 inputs: azureSubscription: '<Azure service connection>' appType: 'webAppLinux' appName: '<Name of web app>' package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription:您的 Azure 訂閱。
- appName:現有的應用程式服務的名稱。
- package:封裝的檔案路徑,或包含您應用程式服務內容的資料夾。 支援萬用字元。
現在您已準備好閱讀本主題的其餘部分,以了解人們在自訂 Azure Web 應用程式部署時所做的一些更常見變更。
使用 Azure Web 應用程式工作
Azure Web 應用程式部署工作是部署至 Azure Web 應用程式最簡單的方式。 根據預設,會在 Azure Web 應用程式中的根應用程式進行您的部署。
Azure App Service 部署工作可讓您修改 Web 套件和 XML 參數檔案內的組態設定。
部署 Web Deploy 封裝
若要將 .zip Web Deploy 封裝 (例如,從 ASP.NET Web 應用程式) 部署至 Azure Web 應用程式,請將下列程式碼片段新增至 azure-pipelines.yml 檔案:
- task: AzureWebApp@1
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of web app>'
package: $(System.DefaultWorkingDirectory)/**/*.zip
- azureSubscription:您的 Azure 訂閱。
- appName:現有的應用程式服務的名稱。
- package:封裝的檔案路徑,或包含您應用程式服務內容的資料夾。 支援萬用字元。
程式碼片段會假設 YAML 檔案中的組建步驟在代理程式的 $(System.DefaultWorkingDirectory)
資料夾中產生 zip 封存檔。
如需 Azure 服務連線的相關資訊,請參閱下一節。
部署 .NET 應用程式
如果您要建置 .NET Core 應用程式,請使用下列程式碼片段將組建部署至應用程式。
variables:
buildConfiguration: 'Release'
steps:
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<Azure service connection>'
appType: 'webAppLinux'
appName: '<Name of web app>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription:您的 Azure 訂閱。
- appType:您的 Web 應用程式類型。
- appName:現有的應用程式服務的名稱。
- package:封裝的檔案路徑,或包含您應用程式服務內容的資料夾。 支援萬用字元。
使用服務連線
若要部署至 Azure App Service,您必須使用 Azure Resource Manager 服務連線。 Azure 服務連線會儲存認證,以便從 Azure Pipelines 或 Azure DevOps Server 連線到 Azure。
深入了解 Azure Resource Manager 服務連線。 如果您的服務連線未如預期般運作,請參閱針對服務連線進行疑難排解。
您將需要 Azure 服務連線以進行 AzureWebApp
工作。 Azure 服務連線會儲存認證,以便從 Azure Pipelines 連線到 Azure。 請參閱建立 ARM 服務連線。
部署至虛擬應用程式
根據預設,會在 Azure Web 應用程式中的根應用程式進行您的部署。 您可以使用 AzureRmWebAppDeployment
工作的 VirtualApplication
屬性來部署至特定的虛擬應用程式:
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
- VirtualApplication:已在 Azure 入口網站中設定的虛擬應用程式名稱。 如需詳細資料,請參閱在 Azure 入口網站中設定 App Service 應用程式。
部署到位置
您可以將 Azure Web 應用程式設定為有多個位置。 位置可讓您安全地部署應用程式並加以測試,然後再提供給您的客戶使用。
下列範例示範如何部署至預備位置,然後交換成生產位置:
- task: AzureWebApp@1
inputs:
azureSubscription: '<Azure service connection>'
appType: webAppLinux
appName: '<name of web app>'
deployToSlotOrASE: true
resourceGroupName: '<name of resource group>'
slotName: staging
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<Azure service connection>'
appType: webAppLinux
WebAppName: '<name of web app>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
- azureSubscription:您的 Azure 訂閱。
- appType:(選擇性) 使用
webAppLinux
部署至 Linux 上的 Web 應用程式。 - appName:現有的應用程式服務的名稱。
- deployToSlotOrASE:布林值。 部署至現有的部署位置或 Azure App Service 環境。
- resourceGroupName:資源群組的名稱。 如果
deployToSlotOrASE
為 true,則為必要項。 - slotName:位置的名稱,預設為
production
。 如果deployToSlotOrASE
為 true,則為必要項。 - SourceSlot:當
SwapWithProduction
為 true 時,傳送至生產環境的位置。 - SwapWithProduction:布林值。 將來源位置的流量與生產環境交換。
部署至多個 Web 應用程式
您可以使用 YAML 檔案中的作業來設定部署管線。 您可以使用作業來控制部署至多個 Web 應用程式的順序。
jobs:
- job: buildandtest
pool:
vmImage: ubuntu-latest
steps:
# publish an artifact called drop
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: drop
# deploy to Azure Web App staging
- task: AzureWebApp@1
inputs:
azureSubscription: '<Azure service connection>'
appType: <app type>
appName: '<name of test stage web app>'
deployToSlotOrASE: true
resourceGroupName: <resource group name>
slotName: 'staging'
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- job: deploy
dependsOn: buildandtest
condition: succeeded()
pool:
vmImage: ubuntu-latest
steps:
# download the artifact drop from the previous job
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
artifact: 'drop'
path: '$(Pipeline.Workspace)'
- task: AzureWebApp@1
inputs:
azureSubscription: '<Azure service connection>'
appType: <app type>
appName: '<name of test stage web app>'
resourceGroupName: <resource group name>
package: '$(Pipeline.Workspace)/**/*.zip'
進行設定變更
對於大部分的語言堆疊,應用程式設定和連接字串可以在執行階段設定為環境變數。
應用程式設定也可以透過使用 Key Vault 參考,從 Key Vault 進行解析。
針對 ASP.NET 和 ASP.NET Core 開發人員,在 App Service 中進行應用程式設定,就像在 Web.config 的 <appSettings>
中進行設定一樣。部署至 Web 應用程式目標之前,您可能需要先套用 Web 應用程式目標的特定設定。
當您將相同的組建部署到管線中的多個 Web 應用程式時,這會很有用。
例如,如果您的 Web.config 檔案包含名為 connectionString
的連接字串,您可以在部署至每個 Web 應用程式之前變更其值。 您可以套用 Web.config 轉換或在 Web.config 檔案中替代變數來執行此動作。
Azure App Service 部署工作可讓使用者根據指定的階段名稱,在網頁套件內修改組態檔 (*.config 檔案) 中的組態設定和 XML 參數檔案 (parameters.xml)。
注意
個別的檔案轉換工作也支援檔案轉換和變數替代,以在 Azure Pipelines 中使用。 您可以使用檔案轉換工作,在任何組態和參數檔案上套用檔案轉換和變數替代。
變數替代
下列程式碼片段顯示變數替代範例:
jobs:
- job: test
variables:
connectionString: <test-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Test stage Azure service connection>'
WebAppName: '<name of test stage web app>'
enableXmlVariableSubstitution: true
- job: prod
dependsOn: test
variables:
connectionString: <prod-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Prod stage Azure service connection>'
WebAppName: '<name of prod stage web app>'
enableXmlVariableSubstitution: true
有條件地部署
若要在 YAML 中執行此動作,您可以使用其中一種方法︰
- 將部署步驟隔離至個別的作業,並將條件新增至該作業。
- 將條件新增至步驟。
下列範例示範如何使用步驟條件,只部署源自主分支的組建:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<Azure service connection>'
appName: '<name of web app>'
如需深入了解其他條件,請參閱指定條件。
(傳統) 部署發行管線
您可以使用發行管線來挑選組建所發佈的成品,然後將其部署至您的 Azure 網站。
執行下列其中一項以開始建立發行管線:
如果您剛完成 CI 組建,請選擇連結 (例如組建 20170815.1) 以開啟組建摘要。 然後選擇 [發行],以啟動自動連結至組建管線的新發行管線。
在 [Azure Pipelines] 中開啟 [發行] 索引標籤,開啟發行管線清單中的 + 下拉式清單,然後選擇 [建立發行管線]。
若要建立發行管線,最簡單的方式就是使用範本。 如果您要部署 Node.js 應用程式,請選取 [將 Node.js 應用程式部署至 Azure App Service] 範本。 否則,選取 [Azure App Service 部署] 範本。 然後選擇 [套用]。
注意
這些範本的唯一差異,在於 Node.js 範本會設定工作來產生 web.config 檔案,當中包含啟動 iisnode 服務的參數。
如果您從組建摘要建立新的發行管線,請檢查組建管線和成品是否顯示在 [管線] 索引標籤上的 [成品] 區段中。如果您從 [發行] 索引標籤建立新的發行管線,請選擇 [+ 新增] 連結,然後選取您的組建成品。
選擇 [成品] 區段中的 [持續部署] 圖示,檢查是否已啟用持續部署觸發程序,並新增篩選以包含主要分支。
注意
當您從 [發行] 索引標籤建立新的發行管線時,預設不會啟用持續部署。
開啟 [工作] 索引標籤並選取 [階段 1],設定工作屬性變數,如下所示:
Azure 訂用帳戶:從 [可用的 Azure 服務連線] 下方的清單中選取連線,或對您的 Azure 訂閱建立權限更具限制性的連線。 如果您使用 Azure Pipelines,且如果您在輸入旁邊看到 [授權] 按鈕,請按一下該按鈕來授權 Azure Pipelines,以連線到您的 Azure 訂用帳戶。 如果您使用 TFS,或如果在訂用帳戶清單中看不到所需的 Azure 訂用帳戶,請參閱 Azure Resource Manager 服務連線以手動設定連線。
App Service 名稱:從您的訂用帳戶中選取 Web 應用程式的名稱。
注意
工作的某些設定可能已在您從範本建立發行管線時自動定義為階段變數。 無法在工作設定中修改這些設定;您必須選取父階段項目才能編輯這些設定。
儲存發行管線。
建立發行以部署您的應用程式
您現在已準備好建立發行,這表示您可以使用特定組建所產生的成品來執行發行管線。 這會導致部署組建:
選擇 [+ 發行],然後選取 [建立發行]。
在 [建立新發行] 面板中,確認已選取您想要使用的成品版本,然後選擇 [建立]。
在資訊列訊息中選擇發行連結。 例如:「已建立發行 Release-1」。
在管線檢視中,選擇管線階段中的狀態連結,以查看記錄和代理程式輸出。
在發行完成後,使用 Web 應用程式 URL
http://{web_app_name}.azurewebsites.net
瀏覽至在 Azure 中執行的網站,並確認其內容。
後續步驟
- 自訂您的 Azure DevOps 管線。