練習 - 建立 Azure DevOps 管線來部署雲端原生應用程式
您的經理希望您變更公司 eShop 應用程式的 CI/CD,以使用 Azure Pipelines。 您現在將建立 Azure DevOps 管線來建置和部署您的產品服務。
建立 Azure DevOps 管線
這很重要
開始之前,您必須擁有 Azure DevOps 帳戶。 如果您沒有,可以在 dev.azure.com 免費創建一個。
- 登入 dev.azure.com。
- 選取 + 新增專案。
- 針對 專案名稱,輸入 eShop 部署。
- 將可見度設定為私人,然後選取建立。
- 在左側,選取 [管線],然後選取 [建立管線]。
- 在 [連線] 頁面上,針對 [ 您的程式碼在哪裡?],選取 [GitHub]。
- 如果出現提示,請登入 GitHub,並授權 Azure Pipelines 存取您的 GitHub 帳戶。
- 針對 [選取存放庫],選取派生的存放庫。
- 在 [設定] 頁面上,選取 [部署至 Azure Kubernetes 服務 ] 選項。
- 在 [部署至 Azure Kubernetes Service] 窗格中,選取您的 Azure 訂用帳戶,然後選取 [繼續]。
- 如果出現提示,請登入您的 Azure 訂用帳戶。
- 針對 [叢集],選取您在上一個單位 aks-eshop 中建立的 AKS 叢集。
- 針對 [命名空間],請保留 [現有] 選取狀態,然後選取 [預設]。
- 針對 容器登錄,選取您在上一個單元中建立的 Azure 容器登錄,例如 acseshop186748394。
- 針對 Image name(影像名稱),輸入 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)
觸發程式和資源區段會定義管線何時應執行。 在此案例中,當變更認可到您存放庫的主分支時,管線將會執行。
變數區段定義管線中使用的變數。 變數可用來定義要使用的 Azure 容器登錄和 Dockerfile。
然後,YAML 會定義使用 ubuntu-latest 代理程式的建置作業。 作業會使用 Docker 工作來建置映像,並將其推送至 Azure Container Registry。
最後一個階段是將更新的產品服務 部署 至 AKS。 作業會使用 KubernetesManifest 工作將映像部署至 Azure Kubernetes 服務 (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'選取 [儲存]。
在 [儲存] 窗格中,選取 [儲存]。
選取 執行,然後在 執行管線 窗格中,選取 執行。
觀看 [組建階段] 完成。 部署階段會暫停,直到您選取它並允許其執行為止。
流水線已經成功完成。 選取 部署 階段以檢視步驟。



