每日EOD执行Jenkins任务:生成成功构建历史邮件报告需求
Jenkins每日EOD构建历史汇总任务方案
需求梳理
- 每日当日结束时自动执行
- 遍历指定任务列表,收集当日所有成功构建的历史信息
- 输出信息需包含:任务名称、构建编号、构建状态、完成时间戳、Git提交ID、提交信息、提交作者
- 将汇总结果发送给指定收件人
核心Groovy代码片段(仅依赖Jenkins默认插件)
// 1. 配置参数 def jobNames = ["JobA", "JobB", "JobC"] // 替换为你的任务名称列表 def recipientEmails = ["user1@example.com", "user2@example.com"] // 替换为收件人邮箱 def today = new Date().clearTime() // 获取今日0点时间 def tomorrow = today + 1 // 明日0点,作为当日构建的时间范围上限 // 2. 构建汇总内容 def reportContent = "=== 每日EOD成功构建汇总报告 ===\n日期: ${today.format('yyyy-MM-dd')}\n\n" jobNames.each { jobName -> def job = Jenkins.instance.getItem(jobName) if (!job) { reportContent += "⚠️ 任务 ${jobName} 不存在,跳过\n\n" return } reportContent += "--- 任务: ${jobName} ---\n" def successfulBuilds = job.getBuilds().findAll { build -> build.result == Result.SUCCESS && build.getTime().after(today) && build.getTime().before(tomorrow) } if (successfulBuilds.isEmpty()) { reportContent += "今日无成功构建记录\n\n" return } successfulBuilds.each { build -> // 获取Git提交信息(依赖Jenkins默认Git插件,需任务配置了Git源码管理) def scm = build.getProject().getScm() def commitId = "N/A" def commitMessage = "N/A" def commitAuthor = "N/A" if (scm instanceof hudson.plugins.git.GitSCM) { def buildData = build.getAction(hudson.plugins.git.util.BuildData.class) if (buildData) { def lastRevision = buildData.getLastBuiltRevision() if (lastRevision) { commitId = lastRevision.getSha1String() def commit = lastRevision.getCommit() if (commit) { commitMessage = commit.getShortMessage() commitAuthor = commit.getAuthor().getName() + " <" + commit.getAuthor().getEmailAddress() + ">" } } } } reportContent += """ 构建编号: ${build.number} 构建状态: ${build.result} 完成时间: ${build.getTime().format('yyyy-MM-dd HH:mm:ss')} Git提交ID: ${commitId} 提交信息: ${commitMessage} 提交作者: ${commitAuthor} ------------------------ """ } reportContent += "\n" } // 3. 发送邮件(依赖Jenkins默认邮件插件) def mailer = Jenkins.instance.getDescriptorByType(hudson.tasks.Mailer.DescriptorImpl.class) def session = javax.mail.Session.getDefaultInstance(new Properties(), null) def message = new javax.mail.internet.MimeMessage(session) message.setFrom(new javax.mail.internet.InternetAddress(mailer.getAdminAddress())) message.setRecipients(javax.mail.Message.RecipientType.TO, javax.mail.internet.InternetAddress.parse(recipientEmails.join(","))) message.setSubject("每日EOD成功构建汇总报告 - ${today.format('yyyy-MM-dd')}") message.setText(reportContent) javax.mail.Transport.send(message) println("报告已发送至: ${recipientEmails.join(', ')}")
代码关键说明
- 时间范围控制:通过
today和tomorrow变量精准筛选当日(0点至次日0点)的构建记录 - Git信息获取:利用Jenkins默认Git插件的
BuildData类提取提交详情,若任务未配置Git则显示N/A - 邮件发送:直接调用JavaMail API(Jenkins默认集成)发送纯文本报告,无需额外插件
任务配置步骤
- 新建一个自由风格软件项目
- 在构建触发器中勾选“Build periodically”,设置日程表达式为
0 0 * * *(每日凌晨0点执行,可根据需求调整) - 在构建步骤中选择“Execute system Groovy script”(需确保Jenkins已开启脚本执行权限,可在全局安全配置中调整)
- 将上述代码粘贴到脚本框中,替换
jobNames和recipientEmails为实际值 - 保存任务,等待自动执行或手动触发测试
内容的提问来源于stack exchange,提问作者Sivaramakrishnan
相关产品推荐
相关产品推荐

