当前位置: 首页 > news >正文

获取jenkins中的构建数据

背景

搭建效能看板,需要获取jenkins中一些job的数据作为数据源输入。
使用node配合jenkins库进行数据获取,jenkins库为:https://www.npmjs.com/package/jenkins
安装:npm i jenkins

准备工作

使用Jenkins获取数据需要知道Jenkins的URL,以及用户名和apiToken。
Jenkins中每个用于构建和测试代码的项目被称为Job,它是 Jenkins 的基本执行单元。
想要同时获取多个job中的数据,可以通过View将Job分类。Jenkins View 是一个逻辑分组工具,用于对 Job 进行分类和管理。随着 Jenkins 中 Job 数量的增加,View 可以帮助用户更清晰地组织和查找任务。
这里我们将需要统计的Job都放到View1中。

代码

const jenkinsApi = require('jenkins');
const moment = require('moment');async function getJobBuildHistory({jenkinsUrl,viewName,username,apiToken,startTime,endTime
}) {const jenkins = new jenkinsApi({ baseUrl: `http://${username}:${apiToken}@${jenkinsUrl}`, crumbIssuer: true });const end = endTime ? moment(endTime) : moment();const start = startTime ? moment(startTime) : end.clone().subtract(1, 'days');const startTs = start.valueOf();const endTs = end.valueOf();try {const view = await jenkins.view.get(viewName);const jobs = view.jobs.map(job => job.name);const buildHistory = [];for (const jobName of jobs) {try {const builds = await jenkins.job.get(jobName, { depth: 1 });for (const build of builds.builds) {const buildInfo = await jenkins.build.get(jobName, build.number);const buildTs = moment(buildInfo.timestamp).valueOf();if (buildTs < startTs) {break;}if (buildTs > endTs) continue;buildHistory.push({jobName,buildNumber: build.number,startTime: moment(buildInfo.timestamp).format('YYYY/MM/DD-HH:mm:ss'),duration: Math.round(buildInfo.duration / 1000),status: buildInfo.result || 'RUNNING',triggeredBy: buildInfo.actions.find(a => a?.causes)?.causes[0]?.shortDescription?.replace('Started by ', '') || 'UNKNOWN'});}} catch (e) {console.error(`  Job processing failed: ${e.message}`);}}return buildHistory;} catch (e) {throw new Error(`View error: ${e.message}`);}
}exports.getCiData = async (req, res) => {const { startTime, endTime } = req.body;try {const history = await getJobBuildHistory({jenkinsUrl: 'your jenkins url,viewName: 'View1',username: 'your username',apiToken: 'your token',startTime,endTime});return res.success(history, 200, '查询成功');} catch (error) {return res.server_error(error);}
};
http://www.lryc.cn/news/571827.html

相关文章:

  • FPGA基础 -- Verilog行为级建模之时序控制
  • markRaw
  • 【java中使用stream处理list数据提取其中的某个字段,并由List<String>转为List<Long>】
  • 爱普特APT32F1104C8T6单片机 高抗干扰+硬件加密双保障
  • 支持向量机(SVM)例题
  • VS Code自动删除末尾空行设置
  • 无需公网IP:Termux+手机+内网穿透实现Minecraft远程多人联机
  • Python从入门到精通
  • Python数据操作
  • Docker搭建RabbitMQ集群环境
  • 机器学习重构光子学设计范式:从智能器件到前沿系统
  • 【力扣每日一题】划分数组并满足最大差限制
  • iOS开发中的安全实践:如何通过Ipa混淆与加固确保应用安全
  • AI 技术落地实战:开发流程优化、行业场景重塑与前沿应用洞察
  • Evertz SVDN 3080ipx-10G Web管理接口任意命令注入及认证绕过漏洞(CVE-2025-4009)
  • Hive 逻辑优化器
  • 持续集成 CI/CD-Jenkins持续集成GitLab项目打包docker镜像推送k8s集群并部署至rancher
  • 京东618带火四大消费 即时零售和生活服务迎来爆发
  • 几种大功率远距传输WiFI解决方案
  • Spring Boot 常用注解整理
  • 支持selenium的chrome driver更新到137.0.7151.119
  • 面向智能制造场景的永磁同步电机预测控制系统设计
  • python大学校园旧物捐赠系统
  • 火山 RTC 引擎12----合流转推 集成
  • (LeetCode 每日一题) 2966. 划分数组并满足最大差限制 (贪心、排序)
  • [Python][Flask][Gunicorn] 搭建一个服务器-初步-小白式教程 - 1
  • 【系统分析师】第3章-基础知识:计算机系统(核心总结)
  • 如何在 MX Linux 上安装 Blender CAD 软件
  • 资源占用多,Linux 系统中如何降低 CPU 资源消耗并提升利用率?
  • 成组进位及其函数