Azure DevOps多阶段流水线配置:仅重跑后续失败作业并执行Stage4
解决方案
要实现重跑时仅执行Stage2、Stage3中的失败作业,且每次重跑都执行Stage4,需要通过作业级条件控制和Stage4强制执行配置来调整流水线,修改后的完整配置如下:
stages: - stage: Stage1 jobs: - template: execution_template1.yml parameters: value: value1 - template: execution_template2.yml parameters: value: value1 - stage: Stage2 condition: not(canceled()) jobs: - template: execution_template3.yml parameters: value: value1 condition: | or( not(variables['Build.IsReRun']), failed('Stage2.execution_template3') ) - template: execution_template4.yml parameters: value: value1 condition: | or( not(variables['Build.IsReRun']), failed('Stage2.execution_template4') ) - stage: Stage3 condition: not(canceled()) jobs: - template: execution_template5.yml parameters: value: value1 condition: | or( not(variables['Build.IsReRun']), failed('Stage3.execution_template5') ) - template: execution_template6.yml parameters: value: value1 condition: | or( not(variables['Build.IsReRun']), failed('Stage3.execution_template6') ) - stage: Stage4 condition: not(canceled()) jobs: - template: consolidate.yml parameters: result: value1 condition: always()
核心调整说明
作业级重跑过滤
给Stage2、Stage3的每个作业添加条件判断:- 首次运行时(
Build.IsReRun为false),正常执行所有作业; - 重跑场景下(
Build.IsReRun为true),仅执行在上次运行中失败的作业(通过failed('Stage名称.作业名称')识别失败作业)。
注意:
failed()函数中的作业名称必须与模板内定义的作业name完全一致,格式为[Stage名].[作业名]。若模板未指定作业名,Azure DevOps会默认使用模板文件名作为作业名,需根据实际情况调整。- 首次运行时(
Stage4强制执行
将Stage4中作业的条件设为always(),确保无论前置Stage的执行结果如何,只要流水线未被取消,Stage4都会在每次重跑时执行,保证合并结果能正常生成。Stage触发条件保留
保留原有的not(canceled())作为Stage2、Stage3、Stage4的触发条件,避免流水线被取消时无意义地执行后续阶段。
内容的提问来源于stack exchange,提问作者A.Yadav
相关产品推荐
相关产品推荐

