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 應用程式工作 (AzureWebApp
) 來部署至管線中的 Azure App Service。 針對更複雜的案例,例如當您需要在部署中使用 XML 參數時,您可以使用 Azure App Service 部署工作 AzureRmWebAppDeployment
。
先決條件:
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- Azure DevOps 組織。 免費建立一個。
- 能夠在 Microsoft 裝載的代理程式上執行管線。 您可以購買平行作業或要求免費層。
- 運作中的 Azure App Service 應用程式,其程式代碼裝載於 GitHub 或 Azure Repos 上。
- .NET: 在 Azure 中建立 ASP.NET Core Web 應用程式。
- ASP.NET: 在 Azure 中建立 ASP.NET Framework Web 應用程式。
- JavaScript: 在 Azure App Service 中建立 Node.js Web 應用程式。
- Java: 在 Azure App Service 中建立 Java 應用程式。
- Python: 在 Azure App Service 中建立 Python 應用程式。
1.建立堆疊的管線
本節中的程式代碼範例假設您要部署 ASP.NET Web 應用程式。 您可以調整說明以用於其他架構。
深入了解 Azure Pipelines 生態系統支援。
登入您的 Azure DevOps 組織並前往您的專案。
移至 [管線] ,然後選取 [ 新增管線]。
出現提示時,請選擇原始程式碼的位置:Azure Repos Git 或 GitHub。
系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入 GitHub 認證。
在存放庫清單出現時,選取您的存放庫。
系統可能會將您重新導向至 GitHub,以安裝 Azure Pipelines 應用程式。 如果發生此情況,請選取 [核准和安裝]。
在 [設定] 索引標籤出現時,選取 [ASP.NET Core]。
在新的管線出現時,請查看 YAML 以了解其用途。 當您準備好時,請選取 [儲存並執行]。
2.新增部署工作
選取 YAML 檔案的結尾,然後選取 [顯示小幫手]。
使用 工作助理 來新增 Azure Web 應用程式 工作。
或者,您可以新增 Azure App Service 部署
AzureRmWebAppDeployment
任務。選擇 Azure 訂用帳戶。 請務必選取 [ 授權 ] 以授權您的連線。 授權會建立必要的服務連線。
根據 App Service 應用程式選取 [應用程式類型]、[應用程式名稱],以及 [執行階段堆疊]。 完成的 YAML 應類似下列程式碼。
variables: buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true - task: AzureWebApp@1 inputs: azureSubscription: '<service-connection-name>' appType: 'webAppLinux' appName: '<app-name>' package: '$(System.DefaultWorkingDirectory)/**/*.zip'
-
azureSubscription
:Azure 訂用帳戶的授權服務連線名稱。 -
appName
:現有應用程式的名稱。 -
package
:套件的檔案路徑或包含App Service內容的資料夾。 支援萬用字元。
-
範例:部署 .NET 應用程式
若要將 .zip Web 套件(例如,從 ASP.NET Web 應用程式)部署到 Azure Web 應用程式,請使用下列代碼段將組建部署至應用程式。
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: 'webAppLinux'
appName: '<app-name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
-
azureSubscription
:您的 Azure 訂用帳戶。 -
appType
:您的 Web 應用程式類型。 -
appName
:現有應用程式服務的名稱。 -
package
:套件的檔案路徑或包含App Service內容的資料夾。 支援萬用字元。
範例:部署至虛擬應用程式
根據預設,您的部署會發生在 Azure Web 應用程式中的根應用程式。 您可以使用 Azure App Service 部署工作VirtualApplication
的屬性來部署至特定虛擬應用程式AzureRmWebAppDeployment
。
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
-
VirtualApplication
:在 Azure 入口網站中設定的虛擬應用程式名稱。 如需詳細資料,請參閱在 Azure 入口網站中設定 App Service 應用程式。
範例:部署到插槽
下列範例示範如何部署至預備位置,然後交換成生產位置:
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
appName: '<app-name>'
deployToSlotOrASE: true
resourceGroupName: '<name of resource group>'
slotName: staging
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
WebAppName: '<app-name>'
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,則為必要項。 -
package
:套件的檔案路徑或包含App Service內容的資料夾。 支援萬用字元。 -
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: '<service-connection-name>'
appType: <app type>
appName: '<staging-app-name>'
deployToSlotOrASE: true
resourceGroupName: <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: '<service-connection-name>'
appType: <app type>
appName: '<production-app-name>'
resourceGroupName: <group-name>
package: '$(Pipeline.Workspace)/**/*.zip'
範例:有條件地部署
若要有條件地在 YAML 中部署,您可以使用下列其中一種技術:
- 將部署步驟隔離至個別的作業,並將條件新增至該作業。
- 將條件新增至步驟。
以下範例展示如何使用步驟條件式,只部署來自主要分支的組建:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
如需深入了解其他條件,請參閱指定條件。
範例:使用 Web Deploy 部署
Azure App Service 部署任務 AzureRmWebAppDeployment
可以使用 Web Deploy 部署到 App Service。
trigger:
- main
pool:
vmImage: windows-latest
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration)'
zipAfterPublish: true
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
常見問題集
AzureWebApp
與 AzureRmWebAppDeployment
工作的差異為何?
Azure Web 應用程式工作AzureWebApp
是部署至 Azure Web 應用程式的最簡單方式。 根據預設,您的部署會發生在 Azure Web 應用程式中的根應用程式。
Azure App Service Deploy 工作 (AzureRmWebAppDeployment
) 可以處理更多自訂情境,例如:
- 如果您通常使用 Internet Information Services (IIS) 部署程式,請使用 Web Deploy 進行部署。
- 部署至虛擬應用程式。
- 部署到其他應用程式類型,例如容器應用程式、函式應用程式、WebJobs 或 API 和行動應用程式。
附註
個別的檔案轉換工作也支援檔案轉換和變數替換,以在 Azure Pipelines 中使用。 您可以使用 檔案轉換 工作,在任何組態和參數檔案上套用檔案轉換和變數替代。
為何會收到「提供的 App Service 套件或資料夾路徑無效」訊息?
在 YAML 管線中,視您的管線而定,您的建置 Web 套件儲存位置與部署工作要尋找的位置之間可能會不相符。 例如,AzureWebApp
工作會挑選要進行部署的網頁套件。
AzureWebApp
工作可能會在 $(System.DefaultWorkingDirectory)/**/*.zip
中查看。 如果網頁套件存放在別處,請修改 package
的值。
為什麼我會收到「只有在使用 Windows 代理程式時才支援使用 Web Deploy 選項發佈」這個訊息?
當您將工作設定為使用 AzureRmWebAppDeployment
,但代理程式未執行 Windows 時,就會在工作中發生此錯誤。 確認您的 YAML 包含類似下列程式代碼的內容:
pool:
vmImage: windows-latest
為什麼當我停用基本身份驗證時,Web Deploy 無法運作?
如需關於如何讓 Microsoft Entra ID 驗證與 AzureRmWebAppDeployment
任務共同運作的疑難排解資訊,請參閱 我無法使用來自 Windows 代理程式的 Microsoft Entra ID 驗證將 Web 部署至 Azure App Service。
相關內容
- 自訂您的 Azure DevOps 管線。