Jenkins流水线各步骤运行时间及参数收集的高效API或插件方案咨询
Jenkins流水线各步骤运行时间及参数收集的高效API或插件方案咨询
嗨,我刚好也碰到过类似的需求,咱们来聊聊可行的解决方案:
一、原生API的优化调用思路
遗憾的是Jenkins原生并没有提供能一次性拉取所有流水线、所有运行实例、阶段耗时+参数的一站式API,但我们可以通过优化调用逻辑来减少请求次数和复杂度:
- 第一步先用
/api/json?tree=jobs[name,url]获取所有流水线的名称和URL,避免后续手动拼接路径出错 - 对每个流水线,调用
/job/<job_name>/wfapi/runs接口,这个接口会返回该流水线的所有运行实例,已经包含了运行参数和阶段的基础信息(名称、状态);如果需要阶段的精确耗时,再针对每个运行实例调用/job/<job_name>/<run_number>/api/json?tree=actions[parameters],stages[name,durationMillis],通过tree参数过滤掉不需要的字段,大大减少返回的数据量 - 小技巧:可以用脚本实现异步批量请求(比如Python的
aiohttp、Node.js的axios并发请求),把多层循环的等待时间压缩下来
二、推荐的插件方案(减少自定义开发)
如果不想自己写太多API调用逻辑,这些插件能帮你直接搞定数据收集,还支持导出结构化数据:
- Pipeline Analytics Plugin:专门针对流水线性能分析的插件,会自动收集每个阶段的耗时、运行参数,还能生成可视化报表。它提供的REST API可以直接导出包含所有你需要字段的结构化数据,而且支持自定义添加额外元数据,之后你直接把数据同步到数据库就行
- Jenkins Metrics Plugin:这款插件会收集Jenkins全量运行指标,包括流水线各阶段的耗时数据。你可以通过它的API获取单条运行的详细数据或者聚合后的统计结果,还能配置自定义标签来补充你需要的额外信息
- Blue Ocean REST API:你提到了Blue Ocean,其实它的API数据结构更规整——比如
/blue/rest/organizations/jenkins/pipelines/<job_name>/runs/接口,返回的每个运行实例里直接包含stages数组(带精确耗时)和parameters参数列表,比原生API少一次跳转请求,更适合批量处理
三、自定义流水线埋点(最灵活的方案)
如果上面的方案都不能完全匹配你的需求,直接在流水线里埋点是最可控的方式:
- 写一个通用的共享库函数,比如
recordStageMetrics(),在每个阶段的前后记录时间戳,同时获取当前运行的参数(用Jenkins内置的params全局变量) - 在函数里把流水线名、阶段名、耗时、运行参数,以及你想添加的额外数据(比如环境标识、自定义标签)一起发送到你的数据库或者中间件(比如Kafka)
- 这种方式完全不需要依赖Jenkins的API,数据实时生成,而且你可以根据需求随时调整收集的字段,适合长期维护的场景
备注:内容来源于stack exchange,提问作者Alessandro Valentini
相关产品推荐
相关产品推荐

