You need to enable JavaScript to run this app. Jenkins declarative pipeline能否在各stage成功或失败时发送邮件?
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins declarative pipeline能否在各stage成功或失败时发送邮件?

需求可行性结论

该需求完全可落地实现,依托Jenkins Declarative Pipeline原生的阶段后置处理机制,配合官方邮件扩展插件,就能精准覆盖Build、package、deploy三类stage的成功/失败状态通知,不需要额外开发自定义插件。

核心实现逻辑
  • 不要把邮件通知逻辑只放在pipeline最外层的全局post块中,这类全局逻辑只会在整条流水线全部运行结束后统一触发,满足不了单stage独立发通知的要求
  • 给每个Build、package、deploy stage单独配置专属的post后置块,通过块内的状态匹配规则,精准捕捉当前stage的执行结果
  • post块内可直接匹配两种核心状态:
    • success:当前stage所有步骤执行无报错时触发
    • failure:当前stage任意步骤执行报错时触发
  • *机制说明:即便某个stage执行失败触发流水线中断,系统也会优先完成该stage内部的post块执行逻辑,确保失败通知能正常发出,不会出现通知漏发的情况
可直接复用的Jenkinsfile示例
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // 原有Build阶段逻辑,例如下载代码、编译构建
                echo "Execute build compile step"
            }
            post {
                success {
                    emailext (
                        subject: "[流水线通知] Build阶段执行成功",
                        body: "当前构建 ${env.BUILD_URL} 的Build阶段已完成",
                        to: "收件人邮箱列表"
                    )
                }
                failure {
                    emailext (
                        subject: "[流水线告警] Build阶段执行失败",
                        body: "当前构建 ${env.BUILD_URL} 的Build阶段执行报错,请及时排查",
                        to: "收件人邮箱列表"
                    )
                }
            }
        }
        stage('package') {
            steps {
                // 原有打包阶段逻辑,例如打包镜像、生成制品
                echo "Execute package step"
            }
            post {
                success {
                    emailext (
                        subject: "[流水线通知] package阶段执行成功",
                        body: "当前构建 ${env.BUILD_URL} 的制品打包阶段已完成",
                        to: "收件人邮箱列表"
                    )
                }
                failure {
                    emailext (
                        subject: "[流水线告警] package阶段执行失败",
                        body: "当前构建 ${env.BUILD_URL} 的制品打包阶段执行报错,请及时排查",
                        to: "收件人邮箱列表"
                    )
                }
            }
        }
        stage('deploy') {
            steps {
                // 原有部署阶段逻辑,例如推送制品到环境、触发服务重启
                echo "Execute deploy step"
            }
            post {
                success {
                    emailext (
                        subject: "[流水线通知] deploy阶段执行成功",
                        body: "当前构建 ${env.BUILD_URL} 的部署流程已完成",
                        to: "收件人邮箱列表"
                    )
                }
                failure {
                    emailext (
                        subject: "[流水线告警] deploy阶段执行失败",
                        body: "当前构建 ${env.BUILD_URL} 的部署流程执行报错,请及时排查",
                        to: "收件人邮箱列表"
                    )
                }
            }
        }
    }
}
落地注意事项
  • 需提前安装Email Extension Plugin插件,在Jenkins全局配置中完成SMTP发件服务参数填写,否则emailext命令无法正常触发邮件发送
  • 如果三个stage的邮件逻辑重复度较高,可以将邮件发送逻辑抽为流水线内的自定义函数,每个stage的success/failure分支仅需传入对应阶段名称调用函数即可,减少重复代码
  • 如果需要在某个stage失败后不中断整条流水线,继续执行后续stage,可以在对应stage的options块中添加catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE')配置,当前stage标记为失败、发完通知后可继续流转到后续stage执行,同样不会影响后续stage的通知触发逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 20:45:04