使用 Azure Pipelines 將自訂容器部署至 App Service
Azure DevOps 可讓您使用免費工作流程來裝載、建置、規劃和測試程式碼。 使用 Azure Pipelines 作為其中一個工作流程,可讓您使用 CI/CD 來部署應用程式,而 CI/CD 可以與任何平台和雲端搭配使用。 管線會定義為您存放庫根目錄中的 YAML 檔案。
在本文中,我們使用 Azure Pipelines 將 Windows 容器應用程式從 Azure DevOps 中的 Git 存放庫部署到 App Service。 它假設您已經在 Azure DevOps 中擁有一個具有支援 Dockerfile 的 .NET 應用程式。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- Azure DevOps 組織。 免費建立一個。
- 一個運作中的 Windows 應用程式,其 Dockerfile 託管在 Azure Repos 上。
新增服務連線
在建立管線之前,您應該先建立服務連線,因為在建立您的範本時系統會要求您選擇並驗證您的連線。 服務連線可讓您在使用工作範本時連線到您選擇的登錄 (ACR 或 Docker Hub)。 新增服務連線時,選擇 Docker 登錄選項。 下列表單要求您選擇 Docker Hub 或 Azure Container Registry 以及相關資訊。 若要跟隨本教學課程,請使用 Azure Container Registry。 您可以依照此處的指示建立新的服務連線。
保護您的密碼
由於我們使用您不希望其他人存取的敏感性資訊,因此我們使用變數來保護我們的資訊。 依照此處的指示建立變數。
若要新增變數,按一下您管線的編輯檢視右上角 [儲存] 按鈕旁邊的 [變數] 按鈕。 選取 [新變數] 按鈕並輸入您的資訊。 新增以下變數以及您自己的適合每個資源的密碼。
- vmImageName: 'windows-latest'
- imageRepository: 'your-image-repo-name'
- dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
- dockerRegistryServiceConnection: 'your-service-connection-number'
建立新管線
使用 .NET 應用程式和支援 Dockerfile 建立存放庫後,您可以按照以下步驟建立管線。
- 瀏覽至左側功能表列上的 [管線],然後按一下 [建立管線] 按鈕
- 在下一個畫面上,選取 [Azure Repos Git] 作為存放庫選項,然後選取程式碼所在的存放庫
- 在 [設定] 索引標籤下,選擇 [入門管線] 選項
- 在下一個 [校閱] 索引標籤下,按一下 [儲存] 按鈕
建置映像,並將其推送至 Azure Container Registry
建立並儲存管線之後,您需要編輯管線以執行建置容器、推送到登錄以及將映像部署到 App Service 的步驟。 首先,瀏覽至 [管道] 功能表,選擇您已建立的管線,然後按一下 [編輯] 按鈕。
首先,您需要新增 Docker 工作,以便建立映像。 新增下列程式碼並將 Dockerfile: app/Dockerfile 取代為 Dockerfile 的路徑。
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
新增 App Service 部署工作
接下來,您需要設定部署工作。 這需要您的訂閱名稱、應用程式名稱和容器登錄。 藉由貼上以下程式碼將新階段新增至 yaml 檔案。
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
接下來,瀏覽到右上角的 [顯示助理] 索引標籤,尋找 [Azure App Service 部署] 工作並填寫以下表單:
- 連線類型:Azure Resource Manager
- Azure 訂閱:您的訂閱名稱
- App Service 類型:用於容器的 Web App (Windows)
- App Service 名稱:您的應用程式名稱
- 登錄或命名空間:your-azure-container-registry-namespace
- 映像:your-azure-container-registry-image-name
填入後,按一下 [新增] 按鈕新增下列工作:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'
在您新增工作之後,管線就可以運作了。 按一下 [驗證並儲存] 按鈕並執行管線。 該管線將完成組建 Windows 容器映像並將其推送到 Azure Container Registry 以及將該映像部署到 App Service 的步驟。
以下是完整 yaml 檔案的範例:
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'