如何实现stage内先执行其他job再触发deployment job审批
问题结论
该需求完全可以实现。
问题原因
你当前遇到审批提前触发的核心原因是:同一Stage下的Job如果没有显式配置依赖关系,Azure DevOps会在Stage启动初始化阶段并行调度所有Job,同时提前校验所有Job关联的受保护资源(配置了审批规则的Environment就属于受保护资源范畴),因此会出现job1还未开始执行,就先弹出环境审批的现象。
修复方案
给deployment Job显式添加对job1的依赖声明,强制deployment Job等待job1所有步骤执行完成后,才会进入自身的调度校验流程,此时触发的环境审批就完全符合你的预期。
修复后的流水线配置参考如下:
- stage: 1 variables: - group: global jobs: - job: 'job1' steps: - task: DownloadPipelineArtifact@2 ... - task: ExtractFiles@1 ... - script: | ... - deployment: dependsOn: job1 # 显式声明依赖job1,等job1执行完成后才会启动当前部署Job environment: DEV strategy: runOnce: deploy: steps: - script: | ...
补充说明:默认配置下只有job1所有任务执行成功,才会进入deployment Job的审批流程。如果你需要无论job1执行成功还是失败,只要它运行结束就触发环境审批,可以在deployment Job层级额外添加condition: always()配置。
内容的提问来源于stack exchange,提问作者darren25
相关产品推荐
相关产品推荐

