練習 - 將模組發佈至登錄
在您的玩具公司中,您都將 Bicep 模組發佈至登錄。 您都是從自己的電腦手動執行發佈流程。 現在,您想要建立管線來處理發佈流程。
在本練習中,您將會:
- 為 Bicep 模組建立容器登錄。
- 將 lint 階段新增至管線。
- 新增管線階段,將模組發佈至您的登錄。
- 確認管線是否成功執行。
- 在登錄中檢查已發佈的模組。
建立容器登錄
您必須先建立登錄供組織使用,才能發佈模組。 在此,您使用 Azure 入口網站來建立登錄。
在瀏覽器中,在 Azure 入口網站內建立新的容器登錄。
在 [基本] 索引標籤上,選取您稍早建立的目標訂用帳戶和 ToyReusable 資源群組。
輸入登錄的名稱,以及接近您的位置。
重要
登錄名稱在 Azure 內必須是唯一的,且包含 5-50 個英數字元。 登錄名稱旁的核取記號表示您選擇的名稱可用。
針對 [SKU],選取 [基本]。
其他組態設定保留預設值。
選取 [檢閱 + 建立]。
檢閱設定顯示已通過驗證,然後選取[建立]。
等候部署完成,通常需要 1 到 2 分鐘。
出現 [部署成功] 訊息時,選取 [前往資源] 以開啟容器登錄。
在容器登錄的 [概觀] 區域中,記下 [登入伺服器] 設定的值。 這將會類似 yourregistryname.azurecr.io。
您很快就需要此值。
新增模組中繼資料檔案
在上一個單元中,您已了解為模組制定版本控制策略的重要性。 您也了解如何使用模組中繼資料檔案,在管線內指定模組的主要和次要版本號碼。 在此,您將為儲存體帳戶模組新增中繼資料檔案。
在 Visual Studio Code 中,展開存放庫根目錄中的 modules/storage-account 資料夾。
建立名為 metadata.json 的新檔案。
將下列內容新增至該檔案:
{ "version": { "major": 1, "minor": 2 } }
請注意,在中繼資料檔中,您另外定義主要和次要版本號碼。 您的管線會在每次管線執行時,將這些號碼與管線的組建編號合併成完整的版本號碼。
儲存對檔案所做的變更。
更新管線定義並新增 lint 階段
您的存放庫包含管線草稿,可當作起點。
在 modules/storage-account 資料夾中開啟 pipeline.yml 檔案。
將
ModuleRegistryServer
環境變數的值更新為容器登錄的伺服器名稱。 您稍早在本練習中複製該名稱。例如,如果登錄的登入伺服器是 yourregistryname.azurecr.io,則它看起來像這樣:
- name: ModuleRegistryServer value: yourregistryname.azurecr.io
在檔案底部,針對
# 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
將發佈階段新增至管線
現在,您可以新增第二個階段,以將模組發佈至容器登錄。
在 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 檔案。
在已建立的步驟下方,新增步驟將模組發佈至登錄。
- 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
引數的值。 還會合併登錄伺服器、模組名稱和版本號碼的值。儲存對檔案所做的變更。
驗證並認可管線定義
確認 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)
如果不相符,請更新以符合此範例,然後將其儲存。
在 Visual Studio Code 終端機中執行下列命令,以認可所做的變更,並將其推送至您的 Git 存放庫:
git add . git commit -m "Add lint and publish stages to storage account module pipeline" git push
在您推送之後,Azure Pipelines 會立即啟動新的管線執行。
監視管線
在您的瀏覽器中,選取 [管線]>[管線]。
選取作用中的管線執行。
執行的管線會隨即顯示。
等候管線執行完成。 Bicep 模組會發佈至容器登錄。
請注意管線的組建編號,其中包含今天的日期和唯一修訂編號。
檢閱登錄中的模組
您也可以在 Azure 入口網站中檢視已發佈的模組。
在瀏覽器中,移至 Azure 入口網站。
移至 ToyReusable 資源群組。
選取您先前建立的容器登錄。
從功能表中選取 [存放庫] 窗格。 然後,選取 modules\storage-account 存放庫,這代表管線發佈的模組。
請注意只有一個「標記」,符合管線發佈的模組版本號碼。 主要版本 (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 專案。
服務連線
- 從 Azure DevOps 專案中,選取[專案設定]>[服務連線]。
- 選取 [ToyReusable]。
- 在右上角中,選取 [更多動作] 的三個點。
- 選取 [刪除] 以確認刪除。
Azure 應用程式註冊
- 從入口網站首頁搜尋 Microsoft Entra ID,並且從 [服務] 清單中加以選取。
- 前往 [管理]>[應用程式註冊]。
- 在 [已刪除的應用程式] 中,選取 [toy-reusable]。
- 選取 [永久刪除],然後遵循提示。
Azure DevOps 專案
- 從 Azure DevOps 專案中,選取[專案設定]>[概觀]。
- 從 [刪除專案] 中,選取 [刪除]。
- 輸入專案名稱並確認刪除。