練習 - 建置實際執行環境應用程式映像

已完成

在上一個練習中,您已建置預備工作流程來建置和發佈應用程式映像。 在此單元中,您會建置使用標記版本觸發程式的生產工作流程。

Diagram that shows the procession from triggers, through three build steps, to the deploy steps in a pipeline.

在此練習中,您:

  • 建置 Actions 工作流程。
  • on tag建立觸發程式。
  • 建置並推送生產映像。
  • 產生個人存取令牌 (PAT)。
  • 觸發標記事件。

建立 GitHub Actions 工作流程

  1. 若要開始建置管線,請移至 GitHub 網站中範例存放庫的分支,然後選取 [ 動作] 索引標籤。

  2. 在左窗格中,選取 [ 新增工作流程]。

    Screenshot that shows the New workflow button on the GitHub Actions page.

  3. 在 [ 選擇工作流程 ] 頁面上,選取 [自行設定工作流程]。

  4. 將基本工作流程複製並貼到編輯窗格中:

    # This is a basic workflow to help you get started with Actions
    
    name: CI
    
    # Controls when the action will run. Triggers the workflow on push or pull request
    # events but only for the main branch
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "build"
      build:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    
        # Steps represent a sequence of tasks that will be executed as part of the job
        steps:
          # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it
          - uses: actions/checkout@v2
    
          # Runs a single command using the runners shell
          - name: Run a one-line script
            run: echo Hello, world!
    
          # Runs a set of commands using the runners shell
          - name: Run a multi-line script
            run: |
              echo Add other actions to build,
              echo test, and deploy your project.
    
  5. 在編輯窗格上方,將檔案從 main.yml 重新命名為 build-production.yml

  6. 將索引 name 鍵從 CI 變更為 Build and push the tagged build to production

建立 『on』 標籤觸發程式

接著,變更 on 機碼中的預設觸發程序。

  1. 移除第二個觸發程序,只保留 push 標記。

  2. branches 金鑰取代為下列 tags 索引鍵。 此索引鍵表示工作流程只會在特定標記上執行。 在此情況下,只有在標記遵循 v* 模式 (包括 v1.0.0) 時,才會執行該工作流程。

    name: Build and push the tagged build to production
    
    on:
      push:
        tags:
          - 'v*'
    

設定簽出步驟

  1. 如上一個練習所示:

    • 將索引 jobs 鍵從 ubuntu-latest 變更為 ubuntu-20.04
    • build 機碼重新命名為 build_push_image
    • 在機碼中 steps ,從範本中刪除最後兩個範例步驟,並保留 checkout 選項。
  2. 建立新步驟以收集必要的版本資訊。 您使用 ::set-output 內部命令來建立此步驟。 在簽出動作底下,新增下列幾行:

    - name: Fetch latest version
      id: fetch_version
      run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
    

    您的 YAML 檔案,不含批注,看起來應該如下列範例所示:

    name: Build and push the tagged build to production
    
    on:
      push:
        tags:
          - 'v*'
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Fetch latest version
            id: fetch_version
            run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
    

新增 Docker 步驟

與暫存工作流程相同,請新增 Docker LoginBuild and push Docker images 步驟。

  1. 在右側面板中,搜尋 Docker 登入。 選取 Docker 發佈的第一個結果。

  2. 在 [安裝]下,選取複製圖示以複製使用量 YAML。

  3. 將複製的 YAML 貼到 Fetch latest version 動作下方。

  4. 將下列值新增至 registryusernamepassword 索引鍵:

    • registry: ${{ secrets.ACR_NAME }}
    • username: ${{ secrets.ACR_LOGIN }}
    • password: ${{ secrets.ACR_PASSWORD }}
  5. 刪除其他索引鍵,因為它們不會在此練習中使用。

  6. 在 Marketplace 下方的右側面板中,搜尋建置和推送 Docker 映射,然後選取 Docker發佈的第一個結果。

  7. 在 [安裝]下,選取複製圖示以複製使用量 YAML。

  8. 將複製的 YAML 貼入先前所複製 docker-login 動作的最後一個機碼下方。

  9. name 機碼從 Build and push Docker images 重新命名為 Build and push production images

  10. 將下列值新增至 contextpushtags 索引鍵:

    • context: .
    • push: true
    • tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }}

    請注意索引鍵的值 tags 與暫存工作流程有何不同。 在 YAML 中使用 steps. 是常見的做法,可參考管線中的先前步驟。 當您在步驟中使用set-outputfetch_version時,會將步驟的GITHUB_REF輸出設定為變數的值。 此輸出現在可用於 steps 物件內的管線。

  11. 刪除其他索引鍵,因為它們不會在此練習中使用。

  12. 在簽出動作和登入動作之間新增另一個呼叫 docker/setup-buildx-action 的動作,以設定 Docker 要使用的建置引擎。 複製下列代碼段,並在和 login 動作之間checkout貼上。

    - name: Set up Buildx
      uses: docker/setup-buildx-action@v3.0.0
    

    您的 YAML 檔案,不含批注,看起來應該如下列範例所示:

    name: Build and push the tagged build to production
    
    on:
      push:
        tags:
          - 'v*'
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Fetch latest version
            id: fetch_version
            run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
    
          - name: Set up Buildx
            uses: docker/setup-buildx-action@v3.0.0
    
          - name: Docker Login
            uses: docker/login-action@v3.0.0
            with:
              registry: ${{ secrets.ACR_NAME }}
              username: ${{ secrets.ACR_LOGIN }}
              password: ${{ secrets.ACR_PASSWORD }}
    
          - name: Build and push production images
            uses: docker/build-push-action@v5.0.0
            with:
              context: .
              tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }}
              push: true
    

認可變更

若要認可變更,請選取右上方的 [ 認可變更 ] 按鈕。 輸入認可的描述,然後選取 [ 認可變更]。

這次,生產動作不會觸發,因為您並未推送新的標籤,但先前的預備動作會觸發並建置新的 latest 映像。

產生個人存取權杖 (PAT)

您需要 PAT,才能在下一個步驟中推送標記,並在稍後的單元中執行部署腳本。

  1. 請前往 GitHub 網站中範例存放庫的分支。 在右上角選取您的設定檔相片,然後選取 [設定]。

  2. 在左側功能表的底部選取 [開發人員設定]。

  3. 從下拉式清單中選取 個人存取權杖>權杖 (傳統)

  4. 選取 [ 產生個人存取令牌]。

  5. 在 [附注] 底下,提供 PAT 的名稱,例如 myPersonalAccessTokenLM

  6. 在 [選取範圍] 下,選取工作流程旁的複選框。

    Screenshot that shows the personal access tokens page.

    注意

    工作流程範圍會授與系統管理員存放庫對 Github 動作的存取權。 您需要此存取權,才能在下一個步驟中推送標記,並在稍後的單元中執行部署腳本。

  7. 選取頁面底部的 [產生權杖]

  8. 選取複製圖示來複製 PAT。 儲存 PAT 以用於後續步驟。

    Screenshot that shows the personal access token after it's created.

觸發標記事件

  1. Azure Cloud Shell 中,移至您複製的存放庫並執行 git pull

  2. 執行以下命令:

    git tag -a v2.0.0 -m 'My first tag'
    
  3. 執行下列命令。 出現提示時,請提供您的 PAT 作為密碼。

    git push --tags
    

    重要

    原始存放庫使用 v1.0.0,因此您必須推送不同的標籤,因為重複專案不存在。

  4. 選取 [動作] 索引標籤,並檢查執行中的程序。

  5. 當程式完成時,請在 Cloud Shell 中執行下列命令,並將 取代 <ACR_NAME>ACR_NAME,以確認結果中會列出兩個標記。

    az acr repository show-tags --repository contoso-website --name <ACR_NAME> -o table
    

請繼續進行下一個單元,以瞭解如何使用 Kubernetes 應用程式的封裝工具 Helm 將管線自動化。