練習 - 將模組發佈至登錄

已完成

在您的玩具公司中,您都將 Bicep 模組發佈至登錄。 您都是從自己的電腦手動執行發佈流程。 現在,您想要建立工作流程來處理發佈流程。

在本練習中,您將會:

  • 為 Bicep 模組建立容器登錄。
  • 將 lint 工作新增至工作流程。
  • 新增工作流程作業,以將模組發佈至登錄。
  • 確認工作流程成功執行。
  • 在登錄中檢查已發佈的模組。

建立容器登錄

您必須先建立登錄供組織使用,才能發佈模組。 在此,您使用 Azure 入口網站來建立登錄。

  1. 在瀏覽器中,在 Azure 入口網站內建立新的容器登錄

  2. 在 [基本] 索引標籤上,選取您稍早建立的目標訂用帳戶和 ToyReusable 資源群組。

  3. 輸入登錄的名稱,以及接近您的位置。

    重要

    登錄名稱在 Azure 內必須是唯一的,且包含 5-50 個英數字元。 登錄名稱旁的核取記號表示您選擇的名稱可用。

  4. 針對 [定價方案],選取 [基本]

    其他組態設定保留預設值。

  5. 選取 [檢閱 + 建立]。

    Azure 入口網站的螢幕擷取畫面,其中顯示容器登錄建立頁面。

  6. 出現 [驗證通過] 訊息時,請選取 [建立]

    等候部署完成,通常需要 1 到 2 分鐘。

  7. 出現 [部署成功] 訊息時,選取 [前往資源] 以開啟容器登錄。

    Azure 入口網站的螢幕擷取畫面,其中顯示容器登錄部署,並醒目提示用於前往資源的按鈕。

  8. 在容器登錄的 [概觀] 區域中,記下 [登入伺服器] 設定的值。 名稱類似 yourregistryname.azurecr.io

    Azure 入口網站的螢幕擷取畫面,其中顯示容器登錄的詳細資料,並醒目提示登入伺服器。

    您很快就需要此值。

新增模組中繼資料檔案

在上一個單元中,您已了解為模組制定版本控制策略的重要性。 您也了解如何使用模組中繼資料檔案,在工作流程內指定模組的主要和次要版本號碼。 在此,您將為儲存體帳戶模組新增中繼資料檔案。

  1. 在 Visual Studio Code 中,展開存放庫根目錄中的 modules/storage-account 資料夾。

  2. 建立名為 metadata.json 的新檔案。

    Visual Studio Code 的螢幕擷取畫面,其中顯示中繼資料點 J S O N 檔案的位置。

  3. 將下列內容新增至該檔案:

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    在中繼資料檔中,您另外定義主要和次要版本號碼。 每當工作流程執行時,工作流程會將這些數字與工作流程的執行編號結合在一起,以形成完整的版本號碼。

  4. 儲存對檔案所做的變更。

更新工作流程定義並新增 lint 作業

存放庫包含工作流程的草稿,可當作起點。

  1. 在 Visual Studio Code 中,展開存放庫根目錄中的 .github/workflows 資料夾。

  2. 開啟 module-storage-account.yml 檔案。

    Visual Studio Code 的螢幕擷取畫面,其中顯示工作流程定義檔案的位置。

  3. MODULE_REGISTRY_SERVER 環境變數的值更新為容器登錄的伺服器名稱。 您稍早在本練習中複製該名稱。

    例如,如果登錄的登入伺服器是 yourregistryname.azurecr.io,則您的程式碼就像這個範例一樣:

    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
  4. 在檔案底部,針對 # To be added 註解,新增下列 lint 作業定義:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    

將發佈工作新增至工作流程

現在,您可以新增第二個作業,以將模組發佈至容器登錄。

  1. module-storage-account.yml 檔案底部,新增發佈作業定義的第一個部分。

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    此定義中的初始兩個步驟是從您的存放庫簽出程式碼並登入 Azure。

  2. 在剛新增的程式碼下方,新增另一個步驟,以從模組的 metadata.json 檔案讀取版本號碼,並設定為環境變數。

    - name: Get module version number
      run: |
        majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
        versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
        echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
    

    此步驟執行指令碼,以使用 jq 命令列應用程式來剖析 JSON 檔案。

  3. 在您已建立的步驟之後,新增最後步驟以將模組發佈至登錄。

    - uses: azure/cli@v1
      name: Publish module
      with:
        inlineScript: |
          az bicep publish \
            --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
            --file ${{ env.MODULE_FILE_PATH }}
    

    此步驟會動態建構 --target 引數的值。 還會合併登錄伺服器、模組名稱和版本號碼的值。

  4. 儲存對檔案所做的變更。

驗證並認可您的工作流程定義

  1. 確認 module-storage-account.yml 檔案看起來像下列範例:

    name: module-storage-account
    concurrency: module-storage-account
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'modules/storage-account/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - name: Get module version number
          run: |
            majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
            versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
            echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
        - uses: azure/cli@v1
          name: Publish module
          with:
            inlineScript: |
              az bicep publish \
                --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
                --file ${{ env.MODULE_FILE_PATH }}
    

    如果檔案內容不同,請將其更新以符合此範例,然後儲存檔案。

  2. 在 Visual Studio Code 終端機中執行下列命令,以認可所做的變更,並將其推送至您的 Git 存放庫:

    git add .
    git commit -m "Add lint and publish jobs to storage account module workflow"
    git push
    

觸發工作流程

  1. 在瀏覽器中,前往您的 GitHub 存放庫,然後選取 [動作] 索引標籤。

  2. 選取 module-storage-account 工作流程。

    請注意,有一個工作流程執行已在進行中。 因為您在模組的資料夾內修改 metadata.json 檔案,已引發推送觸發程序。

  3. 選取清單中的最近一次執行。

    GitHub 的螢幕擷取畫面,其中醒目提示最新執行的模組工作流程。

    等待工作流程執行完畢。 Bicep 模組會發佈至容器登錄。

    記下工作流程的執行編號,可能是 3

檢閱登錄中的模組

您也可以在 Azure 入口網站中檢視已發佈的模組。

  1. 在瀏覽器中,移至 Azure 入口網站

  2. 移至 ToyReusable 資源群組。

  3. 在 [資源] 中,選取您先前建立的容器登錄。

  4. 從功能表中選取 [服務]>[存放庫]。 然後,選取 modules\storage-account 存放庫,這代表工作流程發佈的模組。

    Azure 入口網站的螢幕擷取畫面,其中顯示容器登錄中的 Bicep 模組。

    請注意只有一個標記,符合工作流程發佈的模組版本號碼。 主要版本 (1) 和次要版本 (2) 符合您在 metadata.json 檔案中定義的版本號碼。 修訂編號 (3) 符合工作流程的執行編號。

清除資源

既然您已完成練習,您可以移除資源,以免產生費用。

在 Visual Studio Code 終端中,執行下列命令:

az group delete --resource-group ToyReusable --yes --no-wait

資源群組會在背景中刪除。

Remove-AzResourceGroup -Name ToyReusable -Force

您也可以移除 GitHub 秘密和存放庫,以及 Azure 工作負載識別。

  • GitHub 祕密

    1. 從 GitHub 存放庫中,移至 [設定]>[祕密和變數]>[動作]
    2. 針對每個已儲存的 GitHub 秘密,選取 [刪除 >秘密名稱<] 圖示,然後遵循提示。
  • GitHub 存放庫

    1. 前往 [設定]>[一般]
    2. 選取 [刪除此存放庫] 並依照提示執行。
  • Azure App 註冊的同盟認證和服務主體。

    1. 從入口網站首頁搜尋 Microsoft Entra ID,並且從 [服務] 清單中加以選取。
    2. 前往 [管理]>[應用程式註冊]
    3. 在 [擁有的應用程式] 索引標籤中,選取 [toy-reusable]
    4. 選取 [刪除] 並依照提示執行。
    5. 選取 [刪除的應用程式] 索引標籤。
    6. 選取 [toy-reusable]、選取 [永久刪除],然後選取 [是] 以永久刪除應用程式註冊。

    重要

    可能會有重複的應用程式註冊和服務主體名稱。 建議您確認應用程式識別碼,以確定刪除的是正確的資源。