0

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

WebService 调用 Jenkins api 来获取 Job 信息并将数据转换为 JSON 以提供给 UI。目前,我们在仪表板上有大约 200 个工作。Jenkins API 需要大约 2 分钟来响应详细信息。

Jenkins 在 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]]]

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

关于如何加快 API 响应速度的任何建议。

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

4

2 回答 2

2

低垂的果实:

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

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

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

  • 这将请求数减少到 1
  • 它允许进一步优化,可能绕过上面 Jon S 的评论中提到的问题
于 2017-02-10T09:53:56.743 回答
1

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

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

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

于 2017-02-10T19:34:20.163 回答