You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:24:11