如何将Pipeline及内部各Job的运行时长数据导出为CSV文件
Pipeline下所有子Job运行明细导出CSV的实现方案
界面自带的Export CSV按钮仅支持导出Pipeline维度的整体运行统计,默认不会嵌套带出单条Pipeline下各独立Job的运行详情,要导出P_Weekly_RV_Load_1这类子Job的全量运行数据,可以根据你的使用场景选以下方案:
- 方案1:API拉取自生成CSV(适配全量历史数据导出,最灵活)
几乎所有主流CI/CD平台(GitLab CI、Jenkins、Azure DevOps等)都开放了Pipeline和Job维度的查询接口,三步就能导出全量数据:- 先调用Pipeline列表接口,筛选出指定时间范围内、已执行完成的定时Pipeline,拿到对应Pipeline的运行ID
- 遍历每个Pipeline ID,调用单Pipeline关联的Job列表接口,即可获取每个Job的名称、运行状态、开始/结束时间、运行时长、执行节点、触发人等全量字段
- 按需要的字段整理数据后导出为CSV即可,以下是最简Python实现示例,替换配置参数就能直接用:
import csv import requests # 替换为你的平台配置信息 API_ROOT = "你的CI平台API根地址" ACCESS_TOKEN = "你的个人访问令牌" TARGET_PROJECT_ID = "待统计的项目ID" TARGET_JOB_GROUP = "P_Weekly_RV_Load_1" request_headers = {"PRIVATE-TOKEN": ACCESS_TOKEN} job_data_list = [] # 拉取所有已完成的定时Pipeline记录 pipeline_resp = requests.get( f"{API_ROOT}/projects/{TARGET_PROJECT_ID}/pipelines", params={"scope": "finished", "source": "schedule"}, headers=request_headers ) for pipeline_item in pipeline_resp.json(): # 拉取单条Pipeline下的所有Job明细 job_resp = requests.get( f"{API_ROOT}/projects/{TARGET_PROJECT_ID}/pipelines/{pipeline_item['id']}/jobs", headers=request_headers ) for job_item in job_resp.json(): # 过滤出目标分组下的Job if job_item.get("pipeline_name") == TARGET_JOB_GROUP: job_data_list.append({ "pipeline_run_id": pipeline_item["id"], "job_id": job_item["id"], "job_name": job_item["name"], "run_status": job_item["status"], "start_at": job_item["started_at"], "end_at": job_item["finished_at"], "duration_sec": job_item["duration"], "exec_node": job_item.get("runner", {}).get("description", "") }) # 写入CSV文件 with open("pipeline_job_runtime_detail.csv", "w", newline="", encoding="utf-8") as f: csv_writer = csv.DictWriter(f, fieldnames=job_data_list[0].keys()) csv_writer.writeheader() csv_writer.writerows(job_data_list)
方案2:页面脚本快速导出(适合临时单条Pipeline导出,无需写代码)
如果只是临时导出某几条Pipeline下的Job数据,不用调API,直接在浏览器控制台抓页面表格数据即可:- 打开目标Pipeline的详情页,等待页面上所有Job列表加载完成
- 按F12打开开发者工具,切换到Console标签,运行提前写好的表格抓取脚本,就能自动把当前页的Job数据整理成CSV触发下载,比手动复制效率高很多。
如果是使用Jenkins,也可以直接安装Pipeline Job Exporter类插件,安装后Job列表页会直接出现导出按钮,点一下就能导出当前页所有Job明细。
方案3:定时自动导出(适合长期统计场景)
如果需要长期统计Job运行时长,可以把方案1的脚本挂到服务器定时任务里,按天/周自动拉取最新的Job运行数据,增量写入CSV或者同步到内部报表系统,不用每次手动操作。
参考界面截图
- 已触发的Pipeline作业列表:

- P_Weekly_RV_Load_1下的所有作业列表:

内容的提问来源于stack exchange,提问作者user2703679
相关产品推荐
相关产品推荐

