Jenkins Pipeline单stage失败时如何继续执行且保留失败标记
Jenkins Pipeline多阶段独立执行解决方案
需求说明
单个stage失败时不终止整个Pipeline运行,同时失败的stage保留失败状态,不会被误标记为成功。
可直接使用的修改后脚本
方案1:通过build返回结果手动判断
def map = [FRA1: "192.168.1.1", DEL: "192.168.1.2", NYC: "192.168.1.3"] map.each { key, value -> echo "${key} ${value}" stage("job test-${key}"){ def buildResult = build job: 'jobcheck', parameters: [string(name: 'DC-NAME',value: "${value}")], propagate: false if(buildResult.result == 'FAILURE') { error("${key} 对应检查任务执行失败") } } }
方案说明
- 给
build步骤添加propagate: false参数,子任务失败时不会直接抛出异常中断全局流水线,会返回子任务的执行结果对象 - 手动判断返回结果的状态,失败时调用
error方法,即可将当前stage标记为失败,不影响后续其他stage的执行
方案2:通过catchError实现
def map = [FRA1: "192.168.1.1", DEL: "192.168.1.2", NYC: "192.168.1.3"] map.each { key, value -> echo "${key} ${value}" stage("job test-${key}"){ catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { build job: 'jobcheck', parameters: [string(name: 'DC-NAME',value: "${value}")] } } }
方案说明
catchError会自动捕获当前代码块内的所有异常,按照配置将当前stage和构建结果标记为对应状态,同时继续执行后续代码- 可以根据需求调整
buildResult和stageResult的参数值,比如设置为UNSTABLE将状态标记为不稳定
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

