Jenkins中止流水线后无法修改构建状态是否为预期行为?
这是Jenkins的预期行为,并非Bug
当你中止stage 2的input步骤时,Jenkins会立即将构建状态标记为ABORTED,而这个状态的优先级高于你试图设置的UNSTABLE,因此post阶段的修改无法覆盖它。
背后的逻辑:Jenkins构建状态的优先级
Jenkins的构建结果有明确的优先级顺序(从高到低):
ABORTED(构建被中止)FAILURE(构建失败)UNSTABLE(构建不稳定)SUCCESS(构建成功)
一旦构建进入了更高优先级的状态,后续的任何状态修改都无法降低这个优先级。也就是说,当构建被标记为ABORTED后,你无法再将它改为UNSTABLE或SUCCESS。
结合你的流水线代码分析
当你取消stage 2的input对话框时,Jenkins会触发FlowInterruptedException,并立刻将currentBuild.result设置为ABORTED,然后才进入post阶段的always块。虽然你在脚本里尝试将结果改为UNSTABLE,但因为ABORTED的优先级更高,这个操作不会生效,所以echo输出的依然是Aborted。
如果你想在中止时将状态改为UNSTABLE
可以通过捕获FlowInterruptedException来避免构建进入ABORTED状态,比如修改stage 2的代码:
stage('2') { steps { script { boolean inputCancelled = false try { input "Some message?" } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) { inputCancelled = true currentBuild.result = "UNSTABLE" echo "Input was cancelled, marking build as UNSTABLE" } // 如果需要继续执行后续阶段,这里不需要抛出异常 } } }
这样处理后,当用户取消input时,构建不会被标记为ABORTED,而是会设置为UNSTABLE,并且继续执行后续的stage 3,post阶段的echo也会输出UNSTABLE。
内容的提问来源于stack exchange,提问作者Sina Barghidarian
相关产品推荐
相关产品推荐

