You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Data Factory的YAML模板CI/CD管道中配置预部署审批

问题:Azure DevOps YAML管道实现ADF预部署审批

我已通过YAML模板在Azure DevOps中为Azure Data Factory成功创建CI/CD管道,这与使用Azure DevOps「经典编辑器」创建的管道不同。使用经典编辑器创建构建/发布管道时,我可设置预部署选项,尤其希望配置「预部署审批」,请问能否通过YAML模板实现类似功能?

我的原YAML代码如下:

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- adf_publish

pool:
  vmImage: ubuntu-latest

steps:
- script: |
    tree $(System.DefaultWorkingDirectory)
  displayName: Show file structure of System.DefaultWorkingDirectory during a build


- task: AzurePowerShell@5
  inputs:
    displayName: PreDeployment
    azureSubscription: 'NewConnectionName'
    ScriptType: 'FilePath'
    ScriptPath: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/PrePostDeploymentScript.ps1'
    ScriptArguments: '-armTemplate "$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateForFactory.json" -ResourceGroupName $(ResourceGroup) -DataFactoryName $(DataFactory) -predeployment $true -deleteDeployment $false'
    azurePowerShellVersion: 'LatestVersion'

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'NewConnectionName'
    subscriptionId: '5fa2700d-738a-444e-a643-28241a29d08d'
    action: 'Create Or Update Resource Group'
    resourceGroupName: '$(ResourceGroup)'
    location: '$(Location)'
    templateLocation: 'Linked artifact'
    csmFile: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateForFactory.json'
    csmParametersFile: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateParametersForFactory.json'
    overrideParameters: '-factoryName $(DataFactory)'
    deploymentMode: 'Incremental'


- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'NewConnectionName'
    ScriptType: 'FilePath'
    ScriptPath: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/PrePostDeploymentScript.ps1'
    ScriptArguments: '-armTemplate "$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateForFactory.json" -ResourceGroupName $(ResourceGroup)  -DataFactoryName $(DataFactory) -predeployment $false -deleteDeployment $true'
    azurePowerShellVersion: 'LatestVersion'

我尝试用ManualIntervention或ManualValidation任务实现审批,但均报错:

  1. 使用ManualIntervention任务时:

Job Job: Step references task 'ManualIntervention' at version '8.238.0' which is not valid for the given job target.

  1. 加入网上的ManualValidation代码后:

/caplogic-warehouse-dev-df/azure-pipelines-5.yml (Line: 77, Col: 1): Unexpected value 'jobs'

  1. 调整代码后仍报错:

Job Job: Step references task 'ManualValidation' at version '0.238.0' which is not valid for the given job target.


解决方案

核心问题是:ManualValidation任务只能在pool: server的独立Job中运行,不能与使用虚拟机代理(如ubuntu-latest)的Job混合在同一层级。原YAML使用了简化的steps结构,未显式定义Job,直接添加jobs会导致结构冲突。

需要将管道拆分为多个独立Job,通过dependsOn控制执行顺序:

  1. 构建/预部署Job:使用虚拟机代理执行脚本和预部署操作
  2. 手动审批Job:使用server pool运行ManualValidation,依赖第一个Job完成
  3. 正式部署/后部署Job:依赖审批Job通过,执行部署和后部署操作

修改后的完整YAML代码:

# Starter pipeline
trigger:
- adf_publish

jobs:
# 第一步:构建与预部署操作
- job: Build_PreDeploy
  displayName: Build and Pre-Deployment
  pool:
    vmImage: ubuntu-latest
  steps:
  - script: |
      tree $(System.DefaultWorkingDirectory)
    displayName: Show file structure

  - task: AzurePowerShell@5
    inputs:
      displayName: PreDeployment
      azureSubscription: 'NewConnectionName'
      ScriptType: 'FilePath'
      ScriptPath: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/PrePostDeploymentScript.ps1'
      ScriptArguments: '-armTemplate "$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateForFactory.json" -ResourceGroupName $(ResourceGroup) -DataFactoryName $(DataFactory) -predeployment $true -deleteDeployment $false'
      azurePowerShellVersion: 'LatestVersion'

# 第二步:手动审批环节
- job: WaitForApproval
  displayName: Wait for Pre-Deployment Approval
  pool: server
  timeoutInMinutes: 4320 # 3天超时
  dependsOn: Build_PreDeploy
  steps:
  - task: ManualValidation@0
    timeoutInMinutes: 1440 # 1天超时
    inputs:
      notifyUsers: |
        someone@example.com
      instructions: '请验证构建配置,确认后继续部署'
      onTimeout: 'resume' # 超时自动继续,可选'cancel'终止

# 第三步:正式部署与后部署操作
- job: Deploy_PostDeploy
  displayName: Deployment and Post-Deployment
  pool:
    vmImage: ubuntu-latest
  dependsOn: WaitForApproval
  steps:
  - task: AzureResourceManagerTemplateDeployment@3
    inputs:
      deploymentScope: 'Resource Group'
      azureResourceManagerConnection: 'NewConnectionName'
      subscriptionId: '5fa2700d-738a-444e-a643-28241a29d08d'
      action: 'Create Or Update Resource Group'
      resourceGroupName: '$(ResourceGroup)'
      location: '$(Location)'
      templateLocation: 'Linked artifact'
      csmFile: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateForFactory.json'
      csmParametersFile: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateParametersForFactory.json'
      overrideParameters: '-factoryName $(DataFactory)'
      deploymentMode: 'Incremental'

  - task: AzurePowerShell@5
    inputs:
      azureSubscription: 'NewConnectionName'
      ScriptType: 'FilePath'
      ScriptPath: '$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/PrePostDeploymentScript.ps1'
      ScriptArguments: '-armTemplate "$(System.DefaultWorkingDirectory)/caplogic-warehouse-dev-df/ARMTemplateForFactory.json" -ResourceGroupName $(ResourceGroup) -DataFactoryName $(DataFactory) -predeployment $false -deleteDeployment $true'
      azurePowerShellVersion: 'LatestVersion'

关键注意点

  • 拆分Job后,每个Job需明确指定对应的pool:虚拟机代理用于执行脚本/部署任务,server pool仅用于ManualValidation
  • 用dependsOn确保执行顺序:构建预部署完成→进入审批→审批通过后执行正式部署
  • 原代码中的"需替换为普通双引号",避免脚本参数解析错误
  • onTimeout可设置为cancel(超时终止管道)或resume(超时自动继续),根据需求调整

内容的提问来源于stack exchange,提问作者Patterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:47:28