如何为Jenkins定期构建配置邮件通知?解决收件人缺失异常
Jenkins定时构建邮件无收件人问题的解决方案
针对定时构建时BUILD_USER_EMAIL为空导致的邮件发送失败,推荐以下几种最优解决方式:
1. 为收件人设置默认值(最简单通用)
利用Groovy的Elvis运算符?:,在BUILD_USER_EMAIL为空时自动使用预设的默认邮箱。配置示例:
to: "${BUILD_USER_EMAIL ?: 'your-default-email@example.com'}"
这种方式无需区分构建触发方式,只要触发用户邮箱不存在,就会 fallback 到默认收件人,适合大多数场景。
2. 根据构建触发方式区分收件人
如果需要给手动构建和定时构建设置不同的收件群体,可以通过判断构建原因来动态分配收件人。在流水线中可以这样写:
def getEmailRecipient() { def causes = currentBuild.buildCauses // 判断是否为定时触发 def isTimerTrigger = causes.any { it._class == 'hudson.triggers.TimerTrigger$TimerTriggerCause' } return isTimerTrigger ? 'maintenance-team@example.com' : BUILD_USER_EMAIL } // 邮件配置中调用方法 to: getEmailRecipient()
如果是自由风格项目,可在Email Extension插件的"Pre-send Script"里用类似逻辑,或者直接在收件人字段使用条件表达式:
${BUILD_CAUSE_TIMERTRIGGER?'maintenance-team@example.com':BUILD_USER_EMAIL}
3. 全局配置默认收件人
如果所有定时任务都需要发送到统一的邮箱,可在Jenkins全局配置中设置:
- 进入系统管理 → 系统配置
- 找到邮件通知板块,填写"默认收件人"
- 此配置会作为所有邮件任务的兜底收件人,当任务自身配置的收件人为空时自动生效
注意事项
- 确保默认邮箱地址正确且能正常接收邮件
- 如果使用Email Extension插件,需确认插件版本支持Groovy表达式或条件变量
- 测试时可手动触发和定时触发各跑一次,验证收件人逻辑是否生效
内容的提问来源于stack exchange,提问作者DonnyFlaw
相关产品推荐
相关产品推荐

