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

Jenkins配置求助:每小时发送近1小时成功构建汇总邮件(排除失败)

实现Jenkins每小时汇总成功构建并发送邮件的方案

已完成前置配置

  • 针对目标页面URL创建了自动化测试任务
  • 配置测试任务每5分钟执行一次
  • 已设置构建失败时即时邮件通知
  • 已完成Bitbucket与Jenkins的集成

实现方案

方法1:使用邮件扩展插件+定时任务

1. 创建汇总任务

新建Freestyle项目(例如Hourly-Successful-Builds-Summary),配置构建触发器为Cron表达式 0 * * * *(每小时整点执行)。

2. 编写脚本获取成功构建数据

添加「Execute shell」构建步骤,通过Jenkins API拉取目标测试任务(假设任务名为URL-Automated-Tests)过去1小时内的成功构建记录:

# 替换为你的Jenkins配置信息
USER="jenkins-admin"
TOKEN="your-api-token"
JENKINS_URL="http://your-jenkins-server:8080"
TARGET_JOB="URL-Automated-Tests"

# 计算1小时前的时间戳(毫秒)
ONE_HOUR_AGO=$(( $(date +%s) - 3600 ))000

# 调用API筛选成功构建并保存到文件
curl -s -u $USER:$TOKEN "$JENKINS_URL/job/$TARGET_JOB/api/json?tree=builds[number,result,timestamp,url]" | jq --arg ts "$ONE_HOUR_AGO" '.builds[] | select(.result == "SUCCESS" and .timestamp >= ($ts | tonumber))' > successful_builds.json

注意:需在Jenkins服务器上安装jq工具用于JSON解析,API令牌可从Jenkins个人设置中生成。

3. 配置汇总邮件

安装并启用Email Extension Plugin,在任务的「Post-build Actions」中添加「Editable Email Notification」:

  • 触发条件设置为「Always」
  • 邮件主题设为「每小时Jenkins成功构建汇总」
  • 邮件正文引用生成的汇总文件:
    过去1小时内成功构建记录:
    %FILE,file=successful_builds.json%
    点击构建URL可查看详细信息。
    
  • 配置收件人列表及邮件服务器信息。

方法2:使用Pipeline脚本实现

若使用Jenkins Pipeline,可直接在脚本中整合数据获取与邮件发送逻辑:

pipeline {
    agent any
    triggers {
        cron('0 * * * *') // 每小时执行一次
    }
    stages {
        stage('Fetch Successful Builds') {
            steps {
                script {
                    def jenkinsServer = 'http://your-jenkins-server:8080'
                    def targetJob = Jenkins.instance.getItem('URL-Automated-Tests')
                    def oneHourAgo = System.currentTimeMillis() - 3600000
                    
                    // 筛选过去1小时内的成功构建
                    def successfulBuilds = targetJob.builds.findAll { build ->
                        build.result == Result.SUCCESS && build.timeInMillis >= oneHourAgo
                    }
                    
                    // 生成汇总文本
                    def summaryContent = "过去1小时内成功构建汇总:\n"
                    successfulBuilds.each { build ->
                        summaryContent += "构建编号:${build.number} | 执行时间:${new Date(build.timeInMillis)} | 详情:${jenkinsServer}/${build.url}\n"
                    }
                    
                    // 保存汇总到文件
                    writeFile file: 'build_summary.txt', text: summaryContent
                }
            }
        }
        stage('Send Summary Email') {
            steps {
                emailext(
                    to: 'team@example.com',
                    subject: 'Jenkins每小时成功构建汇总',
                    body: '${FILE,file="build_summary.txt"}'
                )
            }
        }
    }
}

注意:需确保Jenkins全局安全设置允许脚本访问Jenkins实例,避免权限报错。

关键注意事项

  • 权限配置:确保调用API或Pipeline脚本的用户拥有目标任务的构建历史查看权限
  • 时间准确性:Cron表达式与时间戳计算需精准覆盖过去1小时的时间段
  • 内容自定义:可根据需求扩展汇总内容,例如添加测试用例通过率、构建时长等数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:15:16