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
相关产品推荐
相关产品推荐

