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