快速入門:使用 GitHub Actions 部署 Bicep 檔案

GitHub Actions (英文) 是 GitHub 中的一個功能套件,可將您的軟體開發工作流程自動化。 在此快速入門中,您將使用適用於 Azure Resource Manager 部署的 GitHub 動作,將 Bicep 檔案自動部署至 Azure。

其提供 GitHub 動作和 Bicep 檔案的簡介。 如需更多設定 GitHub 動作和專案的詳細步驟,請參閱使用 Bicep 和 GitHub Actions 部署 Azure 資源

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶
  • GitHub 帳戶。 如果您沒有 Microsoft 帳戶,請免費註冊
  • 儲存 Bicep 檔案和工作流程檔案的 GitHub 存放庫。 若要建立一個,請參閱建立新的存放庫 \(英文\)。

建立資源群組

建立資源群組。 稍後在此快速入門中,您會將 Bicep 檔案部署到此資源群組。

az group create -n exampleRG -l westus

產生部署認證

您的 GitHub Actions 會在某個身分識別下執行。 使用 az ad sp create-for-rbac (部分機器翻譯) 命令,針對身分識別建立服務主體 (部分機器翻譯)。 為服務主體授與上一個工作階段中建立之資源群組的參與者角色,讓有身分識別的 GitHub 動作可以在此資源群組中建立資源。 建議您授與最低的必要存取權。

az ad sp create-for-rbac --name {app-name} --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/exampleRG --json-auth

請將預留位置 {app-name} 取代為您的應用程式名稱。 使用您的訂用帳戶 ID 來取代 {subscription-id}

輸出是一個 JSON 物件,內有角色指派認證可讓您存取 App Service 應用程式,如下所示。

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
  }

複製此 JSON 物件以供後續使用。 您只需具有 clientIdclientSecretsubscriptionIdtenantId 值的區段。 請確定您在最後一行結尾沒有額外的逗號,例如前面範例的 tenantId 行,否則會產生無效的 JSON 檔案。 您會在部署期間收到錯誤,指出「登入失敗並出現錯誤:內容不是有效的 JSON 物件。 請仔細檢查 'auth-type' 是否正確。」

設定 GitHub 祕密

為您的 Azure 認證、資源群組和訂用帳戶建立秘密。 您會在 [建立工作流程] 區段中使用這些祕密。

  1. GitHub (英文) 中,瀏覽到您的存放庫。

  2. 選取 [設定] > [祕密和變數] > [動作] > [新存放庫祕密]

  3. 將得自 Azure CLI 命令的整個 JSON 輸出貼到祕密的 [值] 欄位中。 將祕密命名為 AZURE_CREDENTIALS

  4. 建立另一個名為 AZURE_RG 的祕密。 將資源群組名稱新增至祕密的值欄位 (exampleRG)。

  5. 建立另一個名為 AZURE_SUBSCRIPTION 的祕密。 將您的訂用帳戶識別碼新增至祕密的值欄位 (範例:90fd3f9d-4c61-432d-99ba-1273f236afa2)。

新增 Bicep 檔案

將 Bicep 檔案新增至 GitHub 存放庫。 下列 Bicep 檔案會建立儲存體帳戶:

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Bicep 檔案需要一個名為 storagePrefix 的參數,其長度為 3 到 11 個字元。

您可以將檔案放置於存放庫中的任何位置。 下一節的工作流程範例假設 Bicep 檔案名稱為 main.bicep,且儲存於存放庫根目錄中。

建立工作流程

工作流程會定義觸發時要執行的步驟。 其是位於您存放庫 .github/workflows/ 路徑中的 YAML (.yml) 檔案。 工作流程副檔名可以是 .yml.yaml

若要建立工作流程,請採取下列步驟:

  1. 從您的 GitHub 存放庫,選取頂端功能表中的 [動作]

  2. 選取 [新增工作流程]

  3. 選取 [自行設定工作流程]

  4. 如果您偏好使用 main.yml 以外的其他名稱,請將工作流程檔案重新命名。 例如:deployBicepFile.yml

  5. 使用下列程式碼來取代 yml 檔案的內容:

    name: Deploy Bicep file
    on: [push]
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
    
        - name: Checkout code
          uses: actions/checkout@main
    
        - name: Log into Azure
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
        - name: Deploy Bicep file
          uses: azure/arm-deploy@v1
          with:
            subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
            resourceGroupName: ${{ secrets.AZURE_RG }}
            template: ./main.bicep
            parameters: 'storagePrefix=mystore storageSKU=Standard_LRS'
            failOnStdErr: false
    

    使用您自己的儲存體帳戶名稱前置詞來取代 mystore

    注意

    您可以改為在 ARM 部署動作中指定 JSON 格式參數檔案 (範例:.azuredeploy.parameters.json)。

    工作流程檔案的第一個區段包括:

    • name:工作流程的名稱。
    • on:觸發工作流程的 GitHub 事件名稱。 當主分支上有推送事件時,就會觸發工作流程。
  6. 選取 [認可變更]

  7. 選取 [直接認可至主分支]

  8. 選取 [認可新檔案] (或 [認可變更])。

更新工作流程檔案或 Bicep 檔案會觸發工作流程。 工作流程會在您認可變更之後立即啟動。

檢查工作流程狀態

  1. 選取 [動作] 索引標籤。您會看到列出建立 deployBicepFile.yml 工作流程。 執行工作流程需要 1-2 分鐘的時間。
  2. 選取工作流程加以開啟,並確認 StatusSuccess

清除資源

不再需要資源群組和存放庫時,請刪除資源群組和 GitHub 存放庫,以清除您所部署的資源。

az group delete --name exampleRG

下一步

Bicep 檔案結構和語法 (部分機器翻譯)