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

如何在Jenkins脚本化流水线中无论作业状态均触发邮件

Jenkins脚本化流水线:无论构建结果如何都发送邮件

实现方案

通过try-finally结构保证邮件发送逻辑必然执行,同时可通过异常捕获控制流水线是否中断后续阶段。

完整示例代码

node {
    def buildResult = 'SUCCESS'

    try {
        stage('拉取代码') {
            // 替换为你的代码拉取逻辑
            echo '代码拉取完成'
        }

        stage('触发关联作业') {
            // 触发其他Jenkins作业,wait: true表示等待作业完成
            build job: '依赖作业名称', wait: true
        }

        stage('构建与测试') {
            // 替换为你的构建测试逻辑,可取消下面注释模拟失败
            // sh 'exit 1'
            echo '构建测试完成'
        }
    } catch (Throwable err) {
        buildResult = 'FAILURE'
        currentBuild.result = 'FAILURE' // 标记整体构建状态为失败
        echo "流水线执行异常:${err.getMessage()}"
        // 若需要中断后续阶段(除finally外),取消下面注释抛出异常;否则继续执行
        // throw err
    } finally {
        stage('发送通知邮件') {
            echo "基于构建状态[${buildResult}]发送邮件"
            // 使用emailext插件发送邮件,替换为你的配置
            emailext(
                subject: "Jenkins构建通知:${currentBuild.fullDisplayName} - ${buildResult}",
                body: """
                构建结果:${buildResult}
                构建编号:${currentBuild.number}
                查看详情:${currentBuild.absoluteUrl}
                """,
                to: 'target@example.com'
            )
        }
    }
}

关键细节说明

  • try-finally 核心作用:不管try块内是正常完成还是抛出异常,finally块的代码都会执行,从根本上保证邮件发送逻辑不被跳过。
  • 异常捕获与构建状态:在catch块中标记整体构建为失败,同时可以选择是否抛出异常:
    • 抛出异常:流水线会在catch后终止,但finally仍会执行邮件发送。
    • 不抛出异常:后续阶段(如果有)会继续执行,适合需要完成所有阶段再发邮件的场景。
  • 单个阶段容错:如果需要某个阶段失败不影响其他阶段,可在阶段内部单独添加try-catch:
stage('允许失败的阶段') {
    try {
        // 阶段业务逻辑
    } catch (Throwable err) {
        echo "阶段执行失败:${err.getMessage()}"
        currentBuild.result = 'FAILURE' // 不中断流水线,但标记整体构建失败
    }
}

内容的提问来源于stack exchange,提问作者NVNK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:25:57