練習 - 建立 Azure DevOps 管線以部署雲端原生應用程式

已完成

您的經理希望您將 eShop 應用程式的 CI/CD 變更為使用 Azure Pipelines 的公司。 您現在會建立 Azure DevOps Pipeline,以建置和部署您的產品服務。

建立 Azure DevOps 管線

重要

開始之前,您必須擁有 Azure DevOps 帳戶。 如果您沒有帳戶,您可以在 dev.azure.com 免費建立一個。

  1. 登入 dev.azure.com
  2. 選取 [+ 新增專案]
  3. 針對 [ 項目名稱],輸入 eShop 部署
  4. [可見性] 設定為 [ 私人],選取 [ 建立]。
  5. 在左側選取 [ 管線],然後選取 [ 建立管線]。
  6. [連線] 頁面上,針對您的程式代碼在哪裡?,選取 [GitHub]。
  7. 如果出現提示,請登入 GitHub,並授權 Azure Pipelines 存取您的 GitHub 帳戶。
  8. 針對 [ 選取存放庫],選取分支存放庫。
  9. 在 [ 設定 ] 頁面上,選取 [ 部署至 Azure Kubernetes Service ] 選項。
  10. 在 [ 部署至 Azure Kubernetes Service ] 窗格中,選取您的 Azure 訂用帳戶,然後選取 [ 繼續]。
  11. 如果出現提示,請登入您的 Azure 訂用帳戶。
  12. 針對 [ 叢集],選取您在上一個單元 aks-eshop 中建立的 AKS 叢集。
  13. 針對 [ 命名空間],保留 [ 現有] 選取狀態,然後選取 [預設值]。
  14. 針對 Container Registry,選取您在上一個單元中建立的 Azure Container Registry;例如 acseshop186748394
  15. 針對 [ 映射名稱],輸入 productservice
  16. 針對服務埠,輸入 8080
  17. 選取 [驗證及設定]

檢閱管線 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] 頁面右上角,選取 [儲存並執行]。 在 [儲存並執行] 窗格中:

  1. 選取 [為此認可建立新的分支]。
  2. 保留所有其他選項設定為預設值。
  3. 選取儲存並執行

監視管線並進行疑難解答

Azure Pipelines 會從 Azure DevOps 入口網站進行監視和管理。 讓我們看看執行您所建立管線的輸出。

A screenshot showing the status of an Azure Pipeline.

[摘要] 頁面會顯示您執行管線的所有階段。 您可以選取階段,以更詳細地檢視步驟。 在某個時間里,您會看到管線失敗。 選取 [建置階段]。

A screenshot of the build stage in a pipeline that has failed.

在建置階段中,您可以看到組建失敗。 選取 [建置 ] 並將映射推送至 Azure Container Registry 步驟。 記錄檔中的錯誤會顯示:

##[error]Unhandled: No Dockerfile matching  /home/vsts/work/1/s/**/Dockerfile  was found.

修正錯誤

在 DevOps 中,返回管線摘要頁面。 您將編輯已建立的管線來修正錯誤。

  1. 在右上方,選取 [ 更多動作] 功能表,然後選取 [ 編輯管線]。

  2. YAML 檔案的第 17 行會定義要使用的 Dockerfile,而且根據預設,管線預期存放庫根目錄中會有名為 Dockerfile 的檔案。

    eShop 會針對名為 DockerfileProducts 的產品服務使用不同的 Docker 檔案。 將第 17 行編輯為:

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. 選取 [儲存]。

  4. 在 [ 儲存] 窗格中,選取 [ 儲存]。

  5. 選取 [執行],然後在 [執行管線] 窗格中,選取 [執行]。

    觀看建置 階段 完成。 [ 部署] 階段 會暫停,直到您選取它並允許它執行為止。

    A screenshot showing the completed pipeline.

    管線成功完成。 選取 [ 部署 階段] 以檢視步驟。

    A screenshot showing the Deploy stage and the successfully completed steps.