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

如何在Jenkins中查看多个作业的最近X次交织构建?

实现多Jenkins作业构建记录按时间交织展示的方案

嗨,这个需求确实很实用——要把多个作业的最近几次构建按时间线混排,让构建频繁的作业自然出现更多次对吧?我给你分享几个靠谱的实现思路,从快速验证到长期可视化都有:

方法一:用Jenkins内置Groovy脚本快速实现(推荐)

Jenkins自带的Script Console可以直接运行Groovy脚本,不用额外搭建环境,最快拿到结果。步骤如下:

  1. 打开Jenkins,进入 Manage Jenkins → Script Console
  2. 粘贴下面的脚本,修改jobNames和recentBuildsCount为你的需求:
// 配置参数:要监控的作业列表 + 每个作业取最近N次构建
def jobNames = ['作业1', '作业2', '作业3', '作业4', '作业5']
def recentBuildsCount = 5

def allBuilds = []

// 遍历每个作业,收集符合条件的构建
jobNames.each { jobName ->
    def job = Jenkins.instance.getItem(jobName)
    if (job) {
        // 取最近N次已完成的构建(过滤掉正在运行的)
        def builds = job.getBuilds().take(recentBuildsCount).findAll { !it.isBuilding() }
        builds.each { build ->
            allBuilds.add([
                jobName: jobName,
                buildNumber: build.getNumber(),
                timestamp: build.getTimeInMillis(),
                result: build.getResult()?.toString(),
                url: build.getUrl()
            ])
        }
    } else {
        println "⚠️ 作业 ${jobName} 不存在,请检查名称是否正确"
    }
}

// 按时间戳倒序排序(最新的构建排在最前面)
def sortedBuilds = allBuilds.sort { -it.timestamp }

// 格式化输出结果
println "📋 按时间交织的最近构建记录(共${sortedBuilds.size()}条):"
sortedBuilds.each { build ->
    def buildTime = new Date(build.timestamp).format("yyyy-MM-dd HH:mm:ss")
    println "[${buildTime}] ${build.jobName} #${build.buildNumber} - ${build.result ?: '运行中'} - ${build.url}"
}
  1. 点击Run,就能看到按时间交织的构建记录了——构建频繁的作业因为有更多最近构建,自然会在列表里出现更多次。

如果需要把这个结果做成可视化的页面,可以修改脚本,让它生成HTML格式的输出,然后用Jenkins的Custom HTML Plugin把结果嵌入到自定义视图里。

方法二:用Jenkins API + 外部脚本(适合个性化定制)

如果你想用Python/Node.js等语言做更复杂的处理(比如发送到通知工具、生成更美观的报表),可以调用Jenkins REST API来获取数据:

  1. 单个作业的最近构建数据接口:

    GET <你的Jenkins地址>/job/<作业名>/api/json?tree=builds[number,timestamp,result,url]&depth=1
    

    这个接口会返回该作业的构建列表,我们用tree参数过滤掉不需要的字段,提升返回速度。

  2. 用Python脚本示例(需要安装requests库):

    import requests
    from datetime import datetime
    
    # 配置参数
    JENKINS_URL = "http://your-jenkins-url"
    JOB_NAMES = ["作业1", "作业2", "作业3", "作业4", "作业5"]
    RECENT_BUILDS_COUNT = 5
    
    all_builds = []
    
    for job_name in JOB_NAMES:
        url = f"{JENKINS_URL}/job/{job_name}/api/json?tree=builds[number,timestamp,result,url]&depth=1"
        response = requests.get(url)
        if response.status_code == 200:
            job_data = response.json()
            # 取最近N次构建,过滤运行中的
            builds = job_data.get("builds", [])[:RECENT_BUILDS_COUNT]
            for build in builds:
                if build.get("result") is not None:  # 跳过正在运行的
                    all_builds.append({
                        "job_name": job_name,
                        "build_number": build["number"],
                        "timestamp": build["timestamp"],
                        "result": build["result"],
                        "url": build["url"]
                    })
        else:
            print(f"⚠️ 获取作业 {job_name} 数据失败,状态码:{response.status_code}")
    
    # 按时间戳倒序排序
    sorted_builds = sorted(all_builds, key=lambda x: -x["timestamp"])
    
    # 打印结果
    print("📋 按时间交织的最近构建记录:")
    for build in sorted_builds:
        build_time = datetime.fromtimestamp(build["timestamp"] / 1000).strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{build_time}] {build['job_name']} #{build['build_number']} - {build['result']} - {build['url']}")
    

方法三:插件方案(适合无代码需求)

如果不想写代码,可以试试Jenkins的Dashboard View Plugin:

  • 安装插件后创建一个Dashboard视图
  • 添加Build List组件,选择你要监控的多个作业
  • 不过默认的Build List是按作业分组展示的,要实现交织显示可能需要配合Filter Builds组件做自定义过滤,灵活性不如脚本方法,但胜在无需编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:58:53