在Azure DevOps Release中增加審批和檢查

初久的私房菜發表於2024-07-02

在Azure DevOps Release中增加審批和檢查

在Azure DevOps中,釋出管道(Release Pipelines)是自動化部署過程中不可或缺的一部分。透過在釋出流程中增加審批和檢查,我們可以確保部署的安全性和合規性,同時提供更細粒度的控制。本文將介紹如何在Azure DevOps的釋出過程中增加審批和檢查,並提供YAML指令碼程式碼示例。

理解審批和檢查

在Azure DevOps中,審批(Approvals)和檢查(Checks)是兩種機制,用於在自動化部署流程中增加手動干預和自動化驗證。

審批允許團隊成員在部署到特定環境前手動確認或拒絕部署。
檢查則可以是自動的,用於驗證是否滿足特定條件,如時間視窗、程式碼質量、依賴項等。

增加審批

在Azure DevOps的釋出管道中增加審批,可以透過圖形介面操作,也可以透過YAML指令碼來定義。以下是使用YAML定義審批的示例:

# azure-pipelines.yml

trigger: none

stages:
- stage: Deploy
  displayName: 'Deployment with Approval'
  jobs:
  - job: DeployJob
    displayName: 'Deploy to Production'
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - checkout: none
    - task: ManualIntervention@8
      displayName: 'Awaiting Manual Approval'

增加檢查

檢查可以在環境級別配置,也可以透過YAML指令碼來定義。以下是使用YAML定義檢查的示例:

# azure-pipelines.yml

resources:
  environments:
  - name: 'Production'
    resourceType: 'virtualMachine'
    checks:
    - approval:
        timeout: '24h' # Timeout period
        instructions: 'Please review and approve this deployment'

stages:
- stage: Deploy
  displayName: 'Deployment Stage'
  jobs:
  - job: DeployJob
    displayName: 'Deploy to Production'
    environment: 'Production'
    steps:
    - checkout: none
    - script: echo 'Deployment script execution...'
      displayName: 'Execute Deployment Script'

呼叫Azure函式/REST API檢查

除了內建的檢查,Azure DevOps還支援呼叫外部Azure函式或REST API進行更復雜的檢查。以下是定義呼叫Azure函式檢查的示例:

# azure-pipelines.yml

steps:
- task: AzureFunction@1
  displayName: 'Invoke Azure Function Check'
  inputs:
    azureSubscription: 'Your_Azure_Subscription'
    Function: 'Your_Azure_Function_Name'
    # Other input parameters

完整YAML

# azure-pipelines.yml

trigger: none # 禁用自動觸發,示例中僅手動觸發

resources:
  environments:
  - name: 'Production'
    resourceType: 'virtualMachine'
    # 定義環境級別的審批檢查
   審批:
      timeout: '1h' # 設定審批的超時時間為1小時
      instructions: 'Please review and approve the deployment to Production.'

stages:
- stage: Build
  displayName: 'Build Stage'
  jobs:
  - job: BuildJob
    displayName: 'Build Application'
    pool:
      vmImage: 'windows-latest'
    steps:
    - script: echo 'Building the application...'
      displayName: 'Build Script'

- stage: Deploy
  displayName: 'Deployment Stage'
  dependsOn: Build # 此部署階段依賴於構建階段
  jobs:
  - deployment: DeployToProd
    displayName: 'Deploy to Production'
    environment: 'Production'
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: none # 不需要原始碼

          # 手動審批步驟
          - task: ManualIntervention@8
            displayName: 'Manual Approval for Production Deployment'
            inputs:
              instructions: 'Approve to deploy to Production environment.'

          # 呼叫Azure函式檢查步驟
          - task: AzureFunction@1
            displayName: 'Invoke Azure Function for Pre-Deployment Check'
            inputs:
              azureSubscription: 'Your_Azure_Subscription' # 你的Azure訂閱
              Function: 'Your_Azure_Function_For_Check' # 你的Azure函式,用於執行部署前檢查
              functionParameters: '-CodeVersion $(Build.BuildNumber)' # 傳遞引數給Azure函式

          # 部署指令碼步驟
          - script: echo 'Deploying to Production...'
            displayName: 'Deployment Script'

          # 釋出後的操作,例如通知
          - task: AzureFunction@1
            displayName: 'Post-Deployment Notification'
            inputs:
              azureSubscription: 'Your_Azure_Subscription'
              Function: 'Your_Azure_Function_For_Notification' # 你的Azure函式,用於釋出後通知
              functionParameters: '-DD'

結合使用審批和檢查

在實際部署中,審批和檢查往往結合使用,以確保部署流程既符合自動化需求,又滿足手動干預和驗證的要求。透過YAML指令碼,我們可以靈活地定義這些流程,實現複雜的部署策略。

總結

透過在Azure DevOps的釋出管道中增加審批和檢查,我們能夠實現更安全、更可控的部署流程。YAML指令碼的使用提供了一種靈活、宣告式的方法來定義這些流程。結合Azure DevOps的強大功能,我們可以構建出滿足各種業務需求的CI/CD流程。

相關文章