Jenkins阶段失败时执行自定义错误处理代码且不影响构建的方法咨询
解决方案
可以通过try-catch结合Jenkins的状态控制逻辑,实现「阶段失败标记为UNSTABLE、不影响整体构建结果、执行自定义错误处理」的需求,以下是两种实用实现方式:
方法一:try-catch + 手动设置阶段状态
stage("Stage 1") { def stageStatus = 'SUCCESS' try { sh 'scriptThatCanExitWithStatus1.sh' } catch (Exception e) { // 执行自定义错误处理:发送邮件给管理员 emailext( to: 'admin@example.com', subject: "Stage 1 执行失败 - 构建 #${BUILD_NUMBER}", body: "脚本执行出错,错误信息:\n${e.getMessage()}" ) stageStatus = 'UNSTABLE' } finally { // 仅用于设置阶段状态,不改变整体构建结果 catchError(buildResult: 'SUCCESS', stageResult: stageStatus) {} } }
方法二:嵌套catchError + 错误处理
在catchError内部捕获脚本异常,执行处理后重新抛出,让外层catchError完成状态标记:
stage("Stage 1") { catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') { try { sh 'scriptThatCanExitWithStatus1.sh' } catch (Exception e) { // 自定义错误处理:发送邮件 emailext( to: 'admin@example.com', subject: "Stage 1 执行失败 - 构建 #${BUILD_NUMBER}", body: "脚本执行出错,错误信息:\n${e.getMessage()}" ) // 重新抛出异常,触发外层catchError标记阶段为UNSTABLE throw e } } }
关键说明
- 两种方式都能保证:脚本失败时执行自定义邮件逻辑,阶段标记为UNSTABLE,整体构建结果保持SUCCESS,后续阶段不受影响正常执行。
- 若使用
emailext发送邮件,需确保Jenkins已安装该插件并配置好邮件服务器;如果是其他自定义处理逻辑,替换邮件代码即可。
内容的提问来源于stack exchange,提问作者Aleks Vujic
相关产品推荐
相关产品推荐

