練習 - 將模組發佈至登錄

已完成

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

在本練習中,您將會:

  • 為 Bicep 模組建立容器登錄。
  • 將 lint 階段新增至管線。
  • 新增管線階段,將模組發佈至您的登錄。
  • 確認管線是否成功執行。
  • 在登錄中檢查已發佈的模組。

建立容器登錄

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

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

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

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

    重要

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

  4. 針對 [SKU],選取 [基本]

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

  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 的螢幕擷取畫面,其中顯示中繼資料點 JSON 檔案的位置。

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

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

    請注意,在中繼資料檔中,您另外定義主要和次要版本號碼。 您的管線會在每次管線執行時,將這些號碼與管線的組建編號合併成完整的版本號碼。

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

更新管線定義並新增 lint 階段

您的存放庫包含管線草稿,可當作起點。

  1. modules/storage-account 資料夾中開啟 pipeline.yml 檔案。

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

    例如,如果登錄的登入伺服器是 yourregistryname.azurecr.io,則它看起來像這樣:

    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    
  3. 在檔案底部,針對 # To be added 註解,新增含下列 lint 階段定義:

    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    

將發佈階段新增至管線

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

  1. 在 pipeline.yml 檔案底部,定義「發佈」階段,然後新增一個步驟,以從模組的 metadata.json 檔案讀取版本號碼,並將其設定為管線變數。

    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
    

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

  2. 在已建立的步驟下方,新增步驟將模組發佈至登錄。

    - task: AzureCLI@2
      name: Publish
      displayName: Publish module
      inputs:
        azureSubscription: $(ServiceConnectionName)
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az bicep publish \
            --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
            --file $(ModuleFilePath)
    

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

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

驗證並認可管線定義

  1. 確認 storage_account_module.yml 檔案看起來像下列範例:

    trigger:
      batch: true
      branches:
        include:
        - main
      paths:
        include:
        - 'modules/storage-account/**'
    
    variables: 
    - name: ServiceConnectionName
      value: ToyReusable
    - name: ModuleName
      value: storage-account
    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    - name: ModuleFilePath
      value: modules/storage-account/main.bicep
    - name: ModuleMetadataFilePath
      value: modules/storage-account/metadata.json
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
          - task: AzureCLI@2
            name: Publish
            displayName: Publish module
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az bicep publish \
                  --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
                  --file $(ModuleFilePath)
    

    如果不相符,請更新以符合此範例,然後將其儲存。

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

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

    在您推送之後,Azure Pipelines 會立即啟動新的管線執行。

監視管線

  1. 在您的瀏覽器中,選取 [管線]>[管線]

  2. 選取作用中的管線執行。

  3. 執行的管線會隨即顯示。

    等候管線執行完成。 Bicep 模組會發佈至容器登錄。

  4. 請注意管線的組建編號,其中包含今天的日期和唯一修訂編號。

檢閱登錄中的模組

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

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

  2. 移至 ToyReusable 資源群組。

  3. 選取您先前建立的容器登錄。

  4. 從功能表中選取 [存放庫] 窗格。 然後,選取 modules\storage-account 存放庫,這代表管線發佈的模組。

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

    請注意只有一個「標記」,符合管線發佈的模組版本號碼。 主要版本 (1) 和次要版本 (2) 符合您在 metadata.json 檔案中定義的版本號碼。 修訂編號 (20230407.3) 符合管線的組建編號。

清除資源

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

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

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

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

Remove-AzResourceGroup -Name ToyReusable -Force

您也可以移除服務連線和 Azure DevOps 專案。

  • 服務連線

    1. 從 Azure DevOps 專案中,選取[專案設定]>[服務連線]
    2. 選取 [ToyReusable]
    3. 在右上角中,選取 [更多動作] 的三個點。
    4. 選取 [刪除] 以確認刪除。
  • Azure 應用程式註冊

    1. 從入口網站首頁搜尋 Microsoft Entra ID,並且從 [服務] 清單中加以選取。
    2. 前往 [管理]>[應用程式註冊]
    3. [已刪除的應用程式] 中,選取 [toy-reusable]
    4. 選取 [永久刪除],然後遵循提示。
  • Azure DevOps 專案

    1. 從 Azure DevOps 專案中,選取[專案設定]>[概觀]
    2. [刪除專案] 中,選取 [刪除]
    3. 輸入專案名稱並確認刪除。