預覽和核准部署

已完成

您現在已了解工作流程作業,以及如何新增工作流程作業來驗證 Bicep 程式碼。 為了對部署更有信心,下一步是新增另一個作業,以檢查部署究竟會改變什麼。

在本單元中,您將了解如何在工作流程中使用假設狀況命令。 您也將了解如何新增環境保護規則,以便在部署執行之前,有機會手動驗證命令的輸出。

假設狀況作業

Bicep 檔案描述您希望 Azure 環境在部署結束時達到何種狀態。 提交部署時,Azure Resource Manager 會變更 Azure 環境,以符合 Bicep 檔案中所述的狀態。

部署可能會將新的資源部署至環境,或更新現有的資源。 以完整模式執行部署時,甚至可能導致刪除現有的資源。

建立、更新或刪除資源時,總是變化無常。 建議新增額外的步驟,以驗證究竟會建立、更新和刪除什麼。 此驗證讓自動化流程更有價值。 部署至實際執行環境時,務必確認您的環境所產生的變化。

Resource Manager 提供假設狀況作業,供您在工作流程作業內運用於 Bicep 檔案:

工作流程的圖表,包含 Lint、驗證和預覽作業。預覽作業會對 Azure 執行假設狀況作業。

arm-deploy 動作支援使用 additionalArguments 屬性來觸發假設狀況作業:

jobs:
  preview:
     runs-on: ubuntu-latest
     needs: [lint, validate]
     steps: 
     - 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 }}
     - uses: azure/arm-deploy@v1
       name: Run what-if
       with:
         failOnStdErr: false
         resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
         template: deploy/main.bicep
         parameters: >
           environmentType=${{ env.ENVIRONMENT_TYPE }}
         additionalArguments: --what-if

醒目提示的程式碼相當於使用 Azure CLI 執行部署,其中包含 --what-if 引數。

假設狀況作業完全不會改變環境。 只是描述將建立的資源、將更新的資源屬性,以及將刪除的資源。

假設狀況作業有時會顯示將變更的資源,但實際上不會有任何變更。 這種類型的輸出稱為雜訊。 我們正努力減少這些問題,但我們需要您的協助。 報告假設狀況問題

看到假設狀況作業的輸出之後,您可以決定是否繼續部署。 此步驟通常需要人工檢閱假設狀況命令的輸出,然後判斷指出的變更是否合理。 如果人工檢閱者認為變更合理,則可以手動核准工作流程執行。

若要深入了解假設狀況命令,請參閱 Microsoft Learn 課程模組:使用假設狀況來預覽 Azure 部署變更

環境

在 GitHub Actions 中,環境 代表解決方案的部署位置。 環境會提供處理複雜部署時有所幫助的功能。 在未來的課程模組中,您將深入了解環境和其功能。 目前,我們專注於其將必要的檢閱者新增至工作流程的功能。

您可以使用 GitHub Web 介面來建立環境。 您可以在使用公用 GitHub 存放庫或 GitHub Enterprise 帳戶時建立環境。

建立環境之後,您可以在工作流程中的任何作業中參考環境:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: 'Lint Bicep template'
      run: az bicep build --file deploy/main.bicep

  validate:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/arm-deploy@v1
      with:
        deploymentName: ${{ github.run_number }}
        resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
        template: ./deploy/main.bicep
        parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
        deploymentMode: Validate

  deploy:
    runs-on: ubuntu-latest
    environment: MyAzureEnvironment
    needs: [lint, validate]
    steps:
    - uses: actions/checkout@v3
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/arm-deploy@v1
      with:
        deploymentName: ${{ github.run_number }}
        resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
        template: ./deploy/main.bicep
        parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}

注意

當您部署工作流程的工作負載身分識別,在環境中與 Resource Manager 互動時,它需要以環境名稱設定的同盟認證。 您將在未來的課程模組中深入了解環境。 執行本課程模組的練習時,您會建立必要的同盟認證。

環境保護規則

建立環境之後,您可以定義「保護規則」。 保護規則用來驗證步驟使用環境之前必須符合的條件。 「必要的檢閱者」保護規則這種檢查需要人工手動核准。

保護規則是在環境上定義,而不是工作流程。 工作流程 YAML 檔案的作者無法移除或新增這些保護規則。 只有存放庫管理員或帳戶擁有者,才能管理環境及其保護規則。

環境保護規則有助於確保適當的人員參與部署流程。

環境保護規則的運作方式?

將環境與步驟建立關聯之後,步驟開始之前會評估環境的保護規則。

必要的檢閱者是一種保護規則。 設定必要檢閱者保護規則時,請指派一或多個 GitHub 使用者來負責核准工作流程是否繼續。

環境還提供其他類型的保護規則。 例如,您可以限制可部署到特定環境的 Git 分支。 在本課程模組中,我們只討論必要檢閱者規則,但摘要中有連結可取得其他保護規則的詳細資訊。

工作流程開始之後,到達需要檢閱者的步驟時,工作流程執行會暫停。 所有已指定為檢閱者的使用者會在 GitHub 中收到訊息,或收到電子郵件。

檢閱者可以檢查工作流程記錄,例如假設狀況作業偵測到的變更。 然後,檢閱者可以根據此資訊來核准或拒絕變更。 如果核准變更,工作流程會繼續。 如果拒絕,或未於逾時期間內回應,作業會失敗。

工作流程的圖表,其包含 Lint 分析、驗證、預覽和部署作業,部署作業之前有核准檢查。

良好做法的重要性

GitHub 中的環境功能可讓您將部署連結至環境,然後部署會繼承環境管理員所定義的保護規則。 不過,新的工作流程並不一定要使用環境。

組織必須制定良好的做法來檢閱您的工作流程定義。 例如,使用分支保護規則,將存放庫設定為需要對 分支的任何變更,進行提取要求檢閱。 您將於未來的課程模組中深入了解此概念。

您也可以將「祕密」新增至環境。 這樣一來,只有在也使用該環境的作業中才能使用祕密。 您可以結合環境保護規則和祕密,以確保維持工作流程的安全性。