使用 GitHub Actions 部署 ARM 範本
GitHub Actions 為 GitHub 中的一組功能,其可在與您儲存程式碼相同的位置將您的軟體開發工作流程自動化,並針對提取要求和問題進行共同作業。
使用 [部署 Azure Resource Manager 範本動作],自動將 Azure Resource Manager 範本 (ARM 範本) 部署到 Azure。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
GitHub 帳戶。 如果您沒有 Microsoft 帳戶,請免費註冊。
- GitHub 存放庫,以儲存 Resource Manager 範本和工作流程檔案。 若要建立一個,請參閱建立新的存放庫 \(英文\)。
工作流程檔案概觀
工作流程是由您存放庫內 /.github/workflows/
路徑中的 YAML (. yml) 檔案所定義的。 此定義包含組成工作流程的各種步驟與參數。
檔案內有兩個區段:
區段 | 工作 |
---|---|
驗證 | 1.產生部署認證。 |
部署 | 1.部署 Resource Manager 範本。 |
產生部署認證
若要搭配 OIDC 使用 Azure 登入動作 ,您必須在 Microsoft Entra 應用程式或使用者指派的受控識別上設定同盟身分識別認證。
選項 1:Microsoft Entra 應用程式
- 透過 Azure 入口網站、Azure CLI 或 Azure PowerShell,建立具有服務主體的 Microsoft Entra 應用程式。
- 複製用戶端標識碼、訂用帳戶標識碼和目錄(租用戶)標識碼的值,以便稍後在 GitHub Actions 工作流程中使用。
- Azure 入口網站、Azure CLI 或 Azure PowerShell,將適當的角色指派給您的服務主體。
- 在 Microsoft Entra 應用程式 上設定同盟身分識別認證,以信任 GitHub Actions 簽發給 GitHub 存放庫的令牌。
選項 2:使用者指派的受控識別
- 建立使用者指派的受控識別。
- 複製用戶端標識碼、訂用帳戶標識碼和目錄(租用戶)標識碼的值,以便稍後在 GitHub Actions 工作流程中使用。
- 將適當的角色指派給使用者指派的受控識別。
- 在使用者指派的受控識別 上設定同盟身分識別認證,以信任 GitHub Actions 簽發給 GitHub 存放庫的令牌。
設定 GitHub 祕密
您必須將應用程式的 用戶端識別碼、 目錄(租使用者)標識碼和 訂用帳戶識別碼 提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。
在 GitHub (英文) 中,前往您的存放庫。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
注意
若要增強公用存放庫中的工作流程安全性,請使用環境秘密,而不是存放庫秘密。 如果環境需要核准,除非其中一個必要的檢閱者核准環境秘密,否則作業無法存取環境秘密。
建立
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
的秘密。 從您的 Microsoft Entra 應用程式或 GitHub 秘密的使用者指派受控識別複製這些值:GitHub 祕密 Microsoft Entra 應用程式或使用者指派的受控識別 AZURE_CLIENT_ID Client ID AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼 AZURE_TENANT_ID 目錄 (租用戶) ID 注意
基於安全性考慮,我們建議使用 GitHub 秘密,而不是將值直接傳遞至工作流程。
新增 Resource Manager 範本
將 Resource Manager 範本新增至您的 GitHub 存放庫。 此範本會建立儲存體帳戶。
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
您可以將檔案放置於存放庫中的任何位置。 下一節的工作流程範例假設範本檔案名稱為 azuredeploy.json,且會儲存於存放庫根目錄中。
建立工作流程
工作流程檔案必須儲存於存放庫根目錄的 .github/workflow 資料夾中。 工作流程副檔名可以是 .yml 或 .yaml。
- 從您的 GitHub 存放庫,選取頂端功能表中的 [動作]。
- 選取 [新增工作流程]。
- 選取 [自行設定工作流程]。
- 如果您偏好使用 main.yml 以外的其他名稱,請將工作流程檔案重新命名。 例如:deployStorageAccount.yml。
- 以下列內容取代 yml 檔案的內容:
on: [push]
name: Azure ARM
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Checkout code
- uses: actions/checkout@main
# Log into Azure
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Deploy ARM template
- name: Run ARM deploy
uses: azure/arm-deploy@v1
with:
subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
resourceGroupName: ${{ secrets.AZURE_RG }}
template: ./azuredeploy.json
parameters: storageAccountType=Standard_LRS
# output containerName variable from template
- run: echo ${{ steps.deploy.outputs.containerName }}
注意
您可以改為在 ARM 部署動作中指定 JSON 格式參數檔案 (範例:.azuredeploy.parameters.json
)。
工作流程檔案的第一個區段包括:
- name:工作流程的名稱。
- on:觸發工作流程的 GitHub 事件名稱。 當主要分支上有推送事件時,就會觸發工作流程,修改這兩個指定檔案的至少其中之一。 這兩個檔案為工作流程檔案和範本檔案。
- 選取 [開始認可]。
- 選取 [直接認可至主分支]。
- 選取 [認可新檔案] (或 [認可變更])。
由於工作流程會設定為透過要更新的工作流程檔案或範本檔案來觸發,因此,工作流程會在您認可變更後立即啟動。
檢查工作流程狀態
- 選取 [動作] 索引標籤。您會看到 Create deployStorageAccount.yml 工作流程列出。 執行工作流程需要 1-2 分鐘的時間。
- 選取工作流程以將其開啟。
- 從功能表選取 [執行 ARM 部署] 以確認部署。
清除資源
不再需要資源群組和存放庫時,請刪除資源群組和 GitHub 存放庫,以清除您所部署的資源。