我们可以通过此 API 调用获取所有作业及其当前状态的列表:
/view/<pipeline-name>/api/json
此外,我们可以获取上次完成的构建数据任何特定的工作:
/job/<jobname>/lastCompletedBuild/api/json
我的问题是 - 获取有关管道中所有最后完成的构建的数据的最佳方法是什么?目前我正在并行请求此类信息,但希望有一种更简单的方法来实现。即使“更简单”意味着在简单性方面有所取胜但在并行性方面有所失。
答案1
有多种方法可以从 Jenkins API 检索数据,具体取决于格式、详细信息等。
在此示例中,我将使用来自 Ubuntu 的面向公众的 Jenkins 服务建立管道。
使用
curl
,jq
并sort
在命令行上curl -s https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json | jq -r '.jobs[] | [.color, .name] | @csv' | sort
解析此管道子目录 (Precise/All Precise) 的输出,其中
blue
= 通过,red
= 失败。以下是输出示例:
... "blue","precise-server-i386_raid1" "blue","precise-server-i386_samba-server" "blue","precise-server-i386_tomcat-server" "blue","precise-server-i386_virtual-host" "red","precise-adt-apport" "red","precise-adt-apport-armhf" "red","precise-adt-chromium-browser" "red","precise-adt-chromium-browser-armhf" "red","precise-adt-chromium-browser-ppc64el" ...
使用更高级的语言来解析输出。XML、Python、Ruby 都是可行的选择,具体取决于您的用例以及您希望如何进一步呈现数据。
这里没有给出示例,因为关于您想要检索什么数据以及如何发送这些数据的术语仍然太宽泛。
** 编辑 **
在评论中,@shabunc 解释说,想要获取有关最后完成的构建的信息(仍然不清楚正在搜索什么信息或数据,因此我将使用一个例子)。
使用原始调用的 API 请求修饰符会depth
针对原始查询端点打开另一个级别的细节。
在此示例中,我们使用查询参数将相同的管道(视图)扩展一个级别,depth=1
并检索每个作业最后完成的构建编号。
curl -s 'https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json?depth=1' | jq -r '.jobs[] | [.color, .name, .lastCompletedBuild.number] | @csv' | sort
结果现在包括每个作业的构建编号:
... "blue","precise-server-i386_raid1",910 "blue","precise-server-i386_samba-server",909 "blue","precise-server-i386_tomcat-server",901 "blue","precise-server-i386_virtual-host",905 "red","precise-adt-apport",2 "red","precise-adt-apport-armhf",1 "red","precise-adt-chromium-browser",2 "red","precise-adt-chromium-browser-armhf",1 "red","precise-adt-chromium-browser-ppc64el",2 ...
您可以使用以下命令探索返回的所有字段:
curl -s 'https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json?depth=1' | jq '.jobs[0]'
这将返回列表中的第一个作业,其中包含从depth
级别修改器返回的所有字段。
然后,您可以使用 jq 访问器来选择所需的字段,如前面的示例所示。