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

Jenkins声明式流水线Post块条件邮件发送配置问题

解决Jenkins流水线分支特定邮件通知问题

我来帮你搞定这个邮件通知的需求!你之前在post块里尝试用when肯定不行,因为when条件只能用在stage或者并行分支级别,不能直接放在post的步骤里;而if语句其实是可行的,可能是写法细节没处理对。下面给你两种符合需求的实现方式:

方式一:所有分支发maillist-1,master分支额外发maillist-master

如果你的需求是所有分支构建成功都通知maillist-1,同时master分支还要额外通知maillist-master,可以这么写:

pipeline {
    agent any
    stages {
        // 这里放你的构建、测试等阶段
        stage('Build') {
            steps {
                echo '执行构建步骤...'
            }
        }
    }
    post {
        success {
            // 第一步:给所有分支默认发送maillist-1
            emailext(
                to: 'maillist-1@domain.com',
                replyTo: 'maillist-1@domain.com',
                subject: "Jenkins: 构建成功 - 分支 ${env.BRANCH_NAME} :^) 😎",
                body: params.EmailBody // 你的邮件内容参数
            )
            
            // 第二步:判断如果是master分支,额外发送到maillist-master
            if (env.BRANCH_NAME == 'master') {
                emailext(
                    to: 'maillist-master@domain.com',
                    replyTo: 'maillist-master@domain.com',
                    subject: "Jenkins: Master分支构建成功 :^) 😎",
                    body: params.EmailBody
                )
            }
        }
    }
}

方式二:master分支只发maillist-master,其他分支发maillist-1

如果你的需求是master分支单独通知maillist-master,其他分支只通知maillist-1,可以用更简洁的三元表达式:

pipeline {
    agent any
    stages {
        // 你的阶段内容
        stage('Build') {
            steps {
                echo '执行构建步骤...'
            }
        }
    }
    post {
        success {
            // 根据分支动态确定收件人
            def targetMailList = env.BRANCH_NAME == 'master' ? 'maillist-master@domain.com' : 'maillist-1@domain.com'
            
            emailext(
                to: targetMailList,
                replyTo: targetMailList,
                subject: "Jenkins: 构建成功 - 分支 ${env.BRANCH_NAME} :^) 😎",
                body: params.EmailBody
            )
        }
    }
}

关键注意点

  • 环境变量正确性:确保env.BRANCH_NAME能正确获取当前分支名,多分支流水线默认会自动设置这个变量;如果是普通流水线,可能需要通过SCM插件的配置或者手动传递分支信息。
  • emailext插件配置:提前确认Jenkins已经安装了Email Extension Plugin,并且SMTP服务器、发件人等全局配置正确。
  • 避免when的误区:再次强调,when语句不能在post块里使用,只能在stage级别控制阶段是否执行,分支判断只能用Groovy原生的if逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:58:58