如何在同一Jenkins任务中实现每日夜间发送构建状态邮件
嘿,这个需求完全可以在同一个Jenkins任务里搞定,不用拆分任务,我给你两种可行的方案,根据你的任务类型选就行:
解决方案
方案一:自由风格任务实现
如果你用的是传统的自由风格任务,可以通过插件+参数化定时触发来实现:
1. 配置双定时触发规则
保留你原有的每小时cron(比如0 * * * *),再新增一条夜间的定时规则,比如每天凌晨1点触发:0 1 * * * %SEND_STATUS_EMAIL=true。
这里的
%是Jenkins自由风格任务传递参数的分隔符,后面的SEND_STATUS_EMAIL=true是给这次夜间触发的构建标记一个特殊参数。
2. 用条件判断区分任务执行逻辑
先确保安装了Conditional BuildStep插件,然后在任务的「构建」阶段做如下设置:
- 把你原来的任务执行逻辑(比如shell脚本、maven命令等)放进一个「Conditional BuildStep」里
- 条件选择「Run condition」→「String match」,设置为:
- 变量名:
SEND_STATUS_EMAIL - 匹配模式:
^true$ - 勾选「Run if condition is false」
这样一来,只有非夜间触发的构建(也就是每小时的定时任务)才会执行原有任务逻辑,夜间触发的构建会直接跳过任务执行,进入邮件环节。
- 变量名:
3. 扩展邮件触发规则
打开你已配置的「Editable Email Notification」,进入高级设置的「Triggers」部分:
- 保留原有的「Failure」触发器,满足你构建失败时发邮件的需求
- 新增一个「Script - triggered」触发器:
- 在「Script」框里写Groovy判断:
return env.SEND_STATUS_EMAIL == 'true' - 自定义邮件主题(比如「每日Jenkins任务状态报告」)和内容,内容里可以引用历史构建的变量,比如:
每日构建状态更新: 最后一次任务执行时间:${currentBuild.previousBuild.startTime} 最后一次构建状态:${currentBuild.previousBuild.result} 构建详情链接:${currentBuild.previousBuild.absoluteUrl} - 设置好收件人,就完成了夜间状态邮件的配置。
- 在「Script」框里写Groovy判断:
方案二:Jenkins Pipeline实现(更灵活)
如果你的任务是Pipeline类型,直接在Jenkinsfile里写逻辑会更简洁:
pipeline { agent any triggers { cron('0 * * * *') // 每小时执行任务 cron('0 1 * * * ? SEND_STATUS_EMAIL=true') // 凌晨1点触发状态邮件 } parameters { booleanParam(name: 'SEND_STATUS_EMAIL', defaultValue: false, description: '标记是否发送每日状态邮件') } stages { stage('执行任务逻辑') { when { not { equals expected: true, actual: params.SEND_STATUS_EMAIL } } steps { // 这里替换成你的原有任务执行代码 sh './your-build-script.sh' } } stage('发送每日状态邮件') { when { equals expected: true, actual: params.SEND_STATUS_EMAIL } steps { script { // 获取最后一次有效构建的信息 def lastValidBuild = currentBuild.previousBuild def buildStatus = lastValidBuild ? lastValidBuild.result : '无历史构建记录' def buildTime = lastValidBuild ? new Date(lastValidBuild.startTimeInMillis) : 'N/A' def buildLink = lastValidBuild ? lastValidBuild.absoluteUrl : 'N/A' // 发送邮件 emailext ( subject: "每日任务状态报告 - ${buildStatus}", body: """ 您好,以下是任务的最新构建状态: 任务名称:${env.JOB_NAME} 最后一次构建状态:${buildStatus} 最后一次构建时间:${buildTime} 构建详情链接:${buildLink} """, to: 'your-recipient@example.com' ) } } } } post { failure { // 原有构建失败触发的邮件 emailext ( subject: "任务构建失败提醒 - ${env.JOB_NAME}", body: "任务构建失败,详情请查看:${env.BUILD_URL}", to: 'your-recipient@example.com' ) } } }
额外注意事项
- 确保Jenkins已安装
Email Extension Plugin(就是你用的Editable Email Notification对应的插件),自由风格任务还需要Conditional BuildStep Plugin - 测试时可以手动触发任务并勾选
SEND_STATUS_EMAIL参数,验证是否能正确发送状态邮件且不执行任务逻辑 - 如果夜间构建是任务的第一次执行(无历史构建),建议在邮件逻辑里加判断,避免报错
内容的提问来源于stack exchange,提问作者Suresh Sharma
相关产品推荐
相关产品推荐

