Azure DevOps YAML作业模板条件与依赖配置问题求解
解决方案
核心思路是通过YAML模板表达式动态控制deploy作业的dependsOn值,让它在不同action参数下依赖不同的前置作业:
- 当
action = deploy时,deploy作业直接依赖kickoff即可,不需要等待不存在的undeploy作业 - 当
action = redeploy时,deploy作业依赖undeploy作业,保证执行顺序 - 当
action = undeploy时,deploy作业直接不运行
修改后的undeploy.yml(仅优化了条件写法,核心逻辑不变)
parameters: - name: environment default: environmentToDeployTo - name: action values: - deploy - undeploy - redeploy default: redeploy jobs: - deployment: undeploy dependsOn: kickoff # 仅undeploy、redeploy场景运行 condition: in('${{parameters.action}}', 'undeploy', 'redeploy') environment: name: ${{ parameters.environment }} resourceType: virtualMachine tags: app strategy: runOnce: deploy: steps: - checkout: none # 你的undeploy执行步骤
修改后的deploy.yml(核心修改动态依赖逻辑)
parameters: - name: environment default: environmentToDeployTo - name: action values: - deploy - undeploy - redeploy default: redeploy jobs: - deployment: dploy # 根据action参数动态指定前置依赖 ${{ if eq(parameters.action, 'redeploy') }}: dependsOn: undeploy ${{ if eq(parameters.action, 'deploy') }}: dependsOn: kickoff # 仅deploy、redeploy场景运行 condition: in('${{parameters.action}}', 'deploy', 'redeploy') environment: name: ${{ parameters.environment }} resourceType: virtualMachine tags: app strategy: runOnce: deploy: steps: - checkout: none # 你的deploy执行步骤
场景验证
- action = deploy:undeploy作业条件不满足不运行,deploy作业依赖kickoff执行完成后直接启动,符合仅运行deploy的要求
- action = undeploy:deploy作业条件不满足不运行,undeploy作业依赖kickoff执行完成后直接启动,符合仅运行undeploy的要求
- action = redeploy:undeploy作业kickoff完成后先运行,deploy作业等undeploy执行完成后再启动,符合先后顺序要求
内容的提问来源于stack exchange,提问作者Clumsyhands
相关产品推荐
相关产品推荐

