Jenkins API 响应调整

Jenkins API response tuning

我们在 Jenkins 之上构建了一个仪表板,使用户能够仅查看与项目相关的作业并触发构建。 UI 是使用 reactJS 构建的,后端是 JAVA REST WebServices。

WebService 调用 Jenkins api 来获取 Job 信息并将数据转换为 JSON 以提供给 UI。目前,我们在 Dashboard 上有大约 200 个职位。 Jenkins API 需要大约 2 分钟的时间来回复详细信息。

詹金斯 运行 在 Linux 盒子上

OracleLinux 6 x Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz / 39.25 GB

Jenkins 版本 - 1.564,有 16 个执行器和 2000 多个作业

Sample API  Call - http://jenkins:8080/job/jobName/api/json?tree=displayName,builds[result],lastBuild[estimatedDuration,result,duration,number,timestamp,actions[causes[userName]]]

为 200 个作业调用 api 200 次以获取每个作业的详细信息。

有关如何加快 API 响应的任何建议。

我考虑在 linux 框上增加 RAM 并调整 JVM OPTS。还将 Jenkins 升级到最新的 LTS。

Low-hanging水果:

  1. 运行 请求并行,即不是一个接一个。
  2. 如果您这样做并且使用标准 jetty container,请尝试使用 --handlerCountMax 选项增加 工作进程数(默认为40).

最终,您应该尝试避免执行 200 个单独的请求。根据您的设置,单独对每个请求进行安全检查可能会导致大量开销。

因此,最干净的解决方案是从主服务器上的单个 Groovy 脚本 收集您需要的所有数据(您也可以通过 REST 来做到这一点):

  • 这将请求数减少到 1
  • 它允许进一步优化,可能会规避上述 Jon S 评论中提到的问题

您似乎没有在服务器上遇到任何延迟加载问题(因为每个作业只有 60 个构建),正如 Alex O 所建议的,这些问题可能与开销有关。 Alex O 也建议在一个请求中完成所有操作。这可以通过以下请求完成:

http://jenkins:8080/api/json?tree=jobs[displayName,builds[result],lastBuild[estimatedDuration,result,duration,number,timestamp,actions[causes[userName]]]]

我们使用 jenkins API 而不是依赖作业 API,我们可以在其中通过单个请求获取所有作业的数据。