預覽和核准部署

已完成

您現在已了解管線階段,以及如何新增管線階段來驗證 Bicep 程式碼。 為了建立對部署的信心,下一步是新增另一個階段,檢查部署究竟會變更什麼。

在本單元中,您將了解如何在管線中使用假設狀況命令。 您也將了解如何新增核准,讓您在部署執行之前,有機會手動驗證命令的輸出。

假設狀況作業

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

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

建立、更新或刪除資源時,情況總是變化無常。 建議新增額外的步驟,以驗證會建立、更新和刪除哪些資源。 此驗證讓自動化流程更有價值。 部署至實際執行環境時,確認您的環境將有何變化非常重要。

Resource Manager 提供假設狀況作業,而這是您在管線階段內對 Bicep 檔案執行的作業:

Diagram of a pipeline that includes Lint, Validate, and Preview stages. The Preview stage executes a what-if operation against Azure.

您可以使用管線定義內的 az deployment group what-if Azure CLI 命令來執行假設步驟:

stages:

- stage: Preview
  jobs: 
  - job: Preview
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'MyServiceConnection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az deployment group what-if \
            --resource-group $(ResourceGroupName) \
            --template-file deploy/main.bicep

提示

在本課程模組中,我們會使用 Azure CLI 來執行假設狀況作業。 如果您建立自己的 PowerShell 型管線,就可以搭配使用 New-AzResourceGroupDeployment Cmdlet 與 -Whatif 切換,也可以使用 Get-AzResourceGroupDeploymentWhatIfResult Cmdlet。

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

假設狀況作業有時會顯示將變更的資源,但實際上不會有任何變更。 這個反應稱為「雜訊」。 我們正在努力減少這些問題,但我們需要您的協助來回報這些問題

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

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

環境

在 Azure Pipelines 中,「環境」代表解決方案的部署目的地。 環境會提供處理複雜部署時有所幫助的功能。 在未來的課程模組中,您將深入了解環境和其功能。 現在,我們將著重於將手動核准程序新增至管線的能力。

如您所知,您可以使用作業來定義管線階段內的一連串步驟。 當您在管線中包括環境時,需要使用稱為部署作業的特殊作業類型。 部署作業與一般作業類似,但提供某個額外功能。 此功能包括定義部署作業所使用的環境:

variables:
  - name: deploymentDefaultLocation
    value: westus3

stages:

- stage: Preview
  jobs:
  - job: Preview
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'MyServiceConnection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az deployment group what-if \
            --resource-group $(ResourceGroupName) \
            --template-file deploy/main.bicep

- stage: Deploy
  jobs:
    - deployment: Deploy
      environment: MyAzureEnvironment
      strategy:
        runOnce:
          deploy:
            steps:
            - checkout: self

            - task: AzureResourceManagerTemplateDeployment@3
              name: Deploy
              displayName: Deploy to Azure
              inputs:
                connectedServiceName: 'MyServiceConnection'
                location: $(deploymentDefaultLocation)
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep

請注意,在部署作業的 YAML 定義中,與一般作業有幾個主要差異:

  • 部署作業定義為 job,而不是以 deployment 這個字開頭。
  • environment 關鍵字會指定要設為目標的環境名稱。 在上述範例中,會針對名為 MyAzureEnvironment 的環境追蹤部署。
  • strategy 關鍵字會指定 Azure Pipelines 如何執行部署步驟。 部署策略支援複雜部署程序,特別是在您有多個實際執行環境的位置。 在本課程模組中,我們使用 runOnce 部署策略。 此策略的行為與您習慣的其他作業類似。

階段檢查和核准

建立環境之後,您可以定義檢查。 檢查是用來驗證管線使用環境之前必須符合的條件。 核准是一種需要人工手動核准的檢查類型。

檢查需在環境定義,而不是管線。 管線 YAML 檔案的作者無法移除或新增這些檢查和核准。 只有環境的管理員可以管理環境的檢查和核准。

在許多組織中,Azure Pipelines 中的環境擁有者是負責其部署目標環境的人員。 檢查和核准有助於確保適當的人員參與部署程序。

檢查和核准如何運作?

在管線階段開始之前,會評估檢查和核准。 Azure Pipelines 即將執行管線階段時,會查看階段使用的所有管線資源,包括環境在內。 環境可以有需要通過的檢查。

核准是一種檢查類型。 當您設定核准檢查時,會指派一或多個需要核准管線是否繼續執行的使用者。

Azure Pipelines 也提供其他類型的檢查。 例如,您可以呼叫 API 來執行某個自訂邏輯、控制階段可執行的上班時間,甚至查詢 Azure 監視器以確保部署成功。 我們只會討論本課程模組中的核准檢查,但會提供摘要中檢查詳細資訊的連結。

注意

代理程式集區和服務連線也可以對其設定檢查。 您也可以使用稱為手動核准工作的特殊步驟。 不過,在本課程模組中,我們將著重於環境和其相關聯的檢查。

當您的管線開始並到達需要核准檢查的階段之後,管線執行就會暫停。 Azure DevOps 會透過電子郵件傳送訊息給所有已指定為核准者的使用者。

核准者可以檢查管線記錄,例如假設狀況作業偵測到的變更。 然後,他們可以根據此資訊來核准或拒絕變更。 如果他們核准變更,管線就會繼續執行。 如果拒絕,或沒有在可設定的逾時期間內回應,階段就會失敗。

Diagram of a pipeline that includes Lint, Validate, Preview, and Deploy stages, with an approval check before the Deploy stage.

良好做法的重要性

Azure Pipelines 中的環境功能可讓您將部署連結至環境,然後部署會繼承環境擁有者所定義的檢查和核准。 不過,新的管線並不一定要使用環境。

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

您也可以將檢查和核准新增至服務連線,以確保在部署可以使用服務主體的認證之前獲得核准。 不過,該核准也會影響管線執行預檢驗證和假設狀況作業的能力,因為這些程序也需要服務連線。

您可以針對具有專屬服務主體的假設狀況階段使用另一個個別服務連線。 用於預檢和驗證階段的服務主體需要定義自訂 Azure 角色,以確保其具有執行工作所需的最低權限。