使用tree或depth参数在单个http请求中获取所有Jenkins作业

rkkpypqq  于 2023-01-16  发布在  Jenkins
关注(0)|答案(1)|浏览(153)

我目前有一个Jenkins示例,包含大约800个作业。目录结构中有一些嵌套的文件夹,每个层次都包含作业。虽然我认为这不是设置Jenkins的最佳方式,但我无法控制。我目前正在使用Jenkins API通过 NodeJS 环境从这些作业中获取信息。
我尝试了两种方法(这两种方法都有效,但它们会导致一些问题):

  • 从根目录递归调用目录结构,检查是否获得了一个带有_class 'workflowjob'的作业,并使用tree=jobs[*]获取apiURL和文件夹中的作业。
  • 我尝试过将depth = N赋给一个足够大的N,并在一个json对象中获取所有信息。

如果Jenkins示例比较小,那么第一种方法是很好的,但是太多的调用会导致问题并使其下降。
虽然第二种方法也很好,但是目录结构将来可能会改变,硬编码N值不是最理想的,而且返回的对象对于解析也不是最理想的。
我也尝试过用tree=jobs[*]{n,n-1}来限制作业的数量,但这并不理想,因为我想保留所有的作业。
我也尝试过Groovy脚本,但不确定它是否能很好地与我的节点环境集成。
有没有更好/替代的方法来使用REST API解决这个问题?

sr4lhrrt

sr4lhrrt1#

我不会有一个非常 * 高兴 * 和满意的答案给你,因为没有API来支持“获取所有工作”-所以没有什么更好的API(甚至已经有一个开放的门票要求从2016年开始此功能):https://issues.jenkins.io/browse/JENKINS-39774

但可能的方法为:

  • 使用支持这种调用的groovy脚本,例如:
println Jenkins.instance.getAllItems().collect {it.fullName}

关于这个主题的历史讨论(但提及或多或少相同):

相关问题