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

每日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默认集成)发送纯文本报告,无需额外插件

任务配置步骤

  1. 新建一个自由风格软件项目
  2. 在构建触发器中勾选“Build periodically”,设置日程表达式为0 0 * * *(每日凌晨0点执行,可根据需求调整)
  3. 在构建步骤中选择“Execute system Groovy script”(需确保Jenkins已开启脚本执行权限,可在全局安全配置中调整)
  4. 将上述代码粘贴到脚本框中,替换jobNames和recipientEmails为实际值
  5. 保存任务,等待自动执行或手动触发测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:40:19