如何在Jenkins中查看多个作业的最近X次交织构建?
实现多Jenkins作业构建记录按时间交织展示的方案
嗨,这个需求确实很实用——要把多个作业的最近几次构建按时间线混排,让构建频繁的作业自然出现更多次对吧?我给你分享几个靠谱的实现思路,从快速验证到长期可视化都有:
方法一:用Jenkins内置Groovy脚本快速实现(推荐)
Jenkins自带的Script Console可以直接运行Groovy脚本,不用额外搭建环境,最快拿到结果。步骤如下:
- 打开Jenkins,进入 Manage Jenkins → Script Console
- 粘贴下面的脚本,修改
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}" }
- 点击Run,就能看到按时间交织的构建记录了——构建频繁的作业因为有更多最近构建,自然会在列表里出现更多次。
如果需要把这个结果做成可视化的页面,可以修改脚本,让它生成HTML格式的输出,然后用Jenkins的Custom HTML Plugin把结果嵌入到自定义视图里。
方法二:用Jenkins API + 外部脚本(适合个性化定制)
如果你想用Python/Node.js等语言做更复杂的处理(比如发送到通知工具、生成更美观的报表),可以调用Jenkins REST API来获取数据:
单个作业的最近构建数据接口:
GET <你的Jenkins地址>/job/<作业名>/api/json?tree=builds[number,timestamp,result,url]&depth=1这个接口会返回该作业的构建列表,我们用
tree参数过滤掉不需要的字段,提升返回速度。用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
相关产品推荐
相关产品推荐

