預覽和核准部署
您現在已了解管線階段,以及如何新增管線階段來驗證 Bicep 程式碼。 為了建立對部署的信心,下一步是新增另一個階段,檢查部署究竟會變更什麼。
在本單元中,您將了解如何在管線中使用假設狀況命令。 您也將了解如何新增核准,讓您在部署執行之前,有機會手動驗證命令的輸出。
假設狀況作業
Bicep 檔案描述您希望 Azure 環境在部署結束時達到何種狀態。 提交部署時,Azure Resource Manager 會變更 Azure 環境,以符合 Bicep 檔案中所述的狀態。
部署可能會導致新的資源部署到您的環境,或更新現有的資源。 以完整模式執行部署時,甚至可能導致刪除現有的資源。
建立、更新或刪除資源時,可能會有出現意料之外改變的風險。 建議新增額外的步驟,以驗證會建立、更新和刪除哪些資源。 此驗證讓自動化流程更有價值。 部署至實際執行環境時,確認您的環境將有何變化非常重要。
Resource Manager 提供假設狀況作業,而這是您在管線階段內對 Bicep 檔案執行的作業:
您可以在管線定義中使用 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。
假設操作不會對您的環境造成任何變更。 只是描述將建立的資源、將更新的資源屬性,以及將刪除的資源。
假設分析有時會顯示資源內容將有所變更,實際上卻不會發生任何變更。 這個反應稱為「雜訊」。 我們正在努力減少這些問題。 您可以 在這裡回報問題。
在看到假設作業的輸出之後,您可以判斷是否要繼續部署。 此步驟通常涉及人員檢閱假設命令的輸出,然後決定所識別的變更是否合理。 如果檢閱者認為變更合理,您便能手動核准管線執行。
環境
在 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 和電子郵件中收到訊息。
核准者可以檢查管線記錄,例如假設狀況作業偵測到的變更。 然後,他們可以根據此資訊來核准或拒絕變更。 如果他們核准變更,管線就會繼續運作。 如果拒絕,或沒有在可設定的逾時期間內回應,階段就會失敗。
良好做法的重要性
Azure Pipelines 中的環境功能可讓您將部署連結至環境。 然後,部署會繼承由環境擁有者定義的檢查和核准。 不過,新的管線並不一定要使用環境。
您和組織必須制定良好的做法來檢閱管線定義。 例如,使用分支保護原則,將存放庫設定為需要對主分支的任何變更進行提取要求檢閱。 您將於未來的課程模組中深入了解此概念。
您也可以將檢查和核准新增至服務連線,以確保在部署可以使用服務主體的認證之前獲得核准。 不過,該核准也會影響管線執行預檢驗證和假設狀況作業的能力,因為這些程序也需要服務連線。
您可以針對具有專屬服務主體的假設狀況階段使用另一個個別服務連線。 用於預檢和驗證階段的服務主體必須定義自定義 Azure 角色,以確保其具有執行其工作所需的最低許可權。