Jenkins Pipeline的for循环内命令失败如何让循环继续?CatchError是否适用?
Jenkins Pipeline循环内步骤失败不中断执行方案
核心问题结论
使用catchError包裹循环内的Maven执行步骤,不会直接跳转到下一个stage,完全可以让for循环继续处理剩余的取值。
原理说明
catchError是Jenkins Pipeline内置的错误捕获步骤,默认行为如下:
- 仅捕获包裹范围内的执行异常,不会中断整个流程的后续执行
- 步骤执行失败时,默认将本次构建的整体状态标记为
FAILURE(可通过参数修改该行为) - 执行完
catchError块后,会继续执行块后的代码,也就是for循环的下一次迭代
修改后的代码示例
stages { stage('Stage1: Exec') { agent { label 'master' } steps { dir("/opt/exec/") { script { item = params.keys values = item.split(",") // 注:原代码中keys(",")应为split(",")笔误 for (String value: values) { // 用catchError包裹可能失败的bat步骤即可 catchError { bat "//run a maven command for ${value}" } // 此处可扩展自定义逻辑,比如记录当前value的执行结果 } } } } } }
可选配置说明
如果不需要单个Maven命令失败就把整个构建标记为失败,可以调整catchError的参数:
// 单个步骤失败仅将当前Stage标记为不稳定,不影响整体构建状态 catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') { bat "//run a maven command for ${value}" }
内容的提问来源于stack exchange,提问作者Narasinga Rao
相关产品推荐
相关产品推荐

