練習 - 建立 Azure DevOps 管線以部署雲端原生應用程式
您的經理希望您將 eShop 應用程式的 CI/CD 變更為使用 Azure Pipelines 的公司。 您現在會建立 Azure DevOps Pipeline,以建置和部署您的產品服務。
建立 Azure DevOps 管線
重要
開始之前,您必須擁有 Azure DevOps 帳戶。 如果您沒有帳戶,您可以在 dev.azure.com 免費建立一個。
- 登入 dev.azure.com。
- 選取 [+ 新增專案]。
- 針對 [ 項目名稱],輸入 eShop 部署。
- 將 [可見性] 設定為 [ 私人],選取 [ 建立]。
- 在左側選取 [ 管線],然後選取 [ 建立管線]。
- 在 [連線] 頁面上,針對您的程式代碼在哪裡?,選取 [GitHub]。
- 如果出現提示,請登入 GitHub,並授權 Azure Pipelines 存取您的 GitHub 帳戶。
- 針對 [ 選取存放庫],選取分支存放庫。
- 在 [ 設定 ] 頁面上,選取 [ 部署至 Azure Kubernetes Service ] 選項。
- 在 [ 部署至 Azure Kubernetes Service ] 窗格中,選取您的 Azure 訂用帳戶,然後選取 [ 繼續]。
- 如果出現提示,請登入您的 Azure 訂用帳戶。
- 針對 [ 叢集],選取您在上一個單元 aks-eshop 中建立的 AKS 叢集。
- 針對 [ 命名空間],保留 [ 現有] 選取狀態,然後選取 [預設值]。
- 針對 Container Registry,選取您在上一個單元中建立的 Azure Container Registry;例如 acseshop186748394。
- 針對 [ 映射名稱],輸入 productservice。
- 針對服務埠,輸入 8080。
- 選取 [驗證及設定]。
檢閱管線 YAML 檔案
Azure Pipelines 會使用 YAML 檔案來定義建置和部署應用程式的步驟。 YAML 檔案會儲存在您的 GitHub 存放庫中,並根據您提供的資訊自動為您建立。
讓我們檢閱 YAML 檔案:
trigger:
- main
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
imageRepository: 'productservice'
containerRegistry: 'acseshop186748394.azurecr.io'
dockerfilePath: '**/Dockerfile'
tag: '$(Build.BuildId)'
imagePullSecret: 'acseshop18674839414442d34-auth'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
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)
- upload: manifests
artifact: manifests
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
觸發程式和資源區段會定義管線何時應該執行。 在此情況下,管線會在將變更認可至存放庫的主要分支時執行。
variables 區段會定義管線中使用的變數。 變數可用來定義 Azure Container Registry,以及要使用的 Dockerfile。
YAML 接著會定義使用 ubuntu-latest 代理程式的組建作業。 作業會使用 Docker 工作來建置映射,並將映像推送至 Azure Container Registry。
最後一個階段是將 更新的產品服務部署 至 AKS。 作業會 使用 KubernetesManifest 工作將映像部署至 AKS。
執行管線
在 [檢閱管線 YAML] 頁面右上角,選取 [儲存並執行]。 在 [儲存並執行] 窗格中:
- 選取 [為此認可建立新的分支]。
- 保留所有其他選項設定為預設值。
- 選取儲存並執行。
監視管線並進行疑難解答
Azure Pipelines 會從 Azure DevOps 入口網站進行監視和管理。 讓我們看看執行您所建立管線的輸出。
[摘要] 頁面會顯示您執行管線的所有階段。 您可以選取階段,以更詳細地檢視步驟。 在某個時間里,您會看到管線失敗。 選取 [建置階段]。
在建置階段中,您可以看到組建失敗。 選取 [建置 ] 並將映射推送至 Azure Container Registry 步驟。 記錄檔中的錯誤會顯示:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
修正錯誤
在 DevOps 中,返回管線摘要頁面。 您將編輯已建立的管線來修正錯誤。
在右上方,選取 [ 更多動作] 功能表,然後選取 [ 編輯管線]。
YAML 檔案的第 17 行會定義要使用的 Dockerfile,而且根據預設,管線預期存放庫根目錄中會有名為 Dockerfile 的檔案。
eShop 會針對名為 DockerfileProducts 的產品服務使用不同的 Docker 檔案。 將第 17 行編輯為:
dockerfilePath: '**/DockerfileProducts.acr'
選取 [儲存]。
在 [ 儲存] 窗格中,選取 [ 儲存]。
選取 [執行],然後在 [執行管線] 窗格中,選取 [執行]。
觀看建置 階段 完成。 [ 部署] 階段 會暫停,直到您選取它並允許它執行為止。
管線成功完成。 選取 [ 部署 階段] 以檢視步驟。