jenkins – 我如何获取有关上一次成功构buildpipe道中所有作业的信息?

我们可以通过这个API调用获得所有作业的列表:

/view/<pipeline-name>/api/json 

另外,我们可以获取任何特定作业的最后完成版本的数据:

 /job/<jobname>/lastCompletedBuild/api/json 

我的问题是 – 什么是最好的方式来获取有关pipe道中的所有最后完成的构build的数据? 目前我正在同时请求这种信息,但希望有一个更简单的方法来做到这一点。 即使“简单”意味着以简单的方式来赢得某些东西,但是却要松散地并行。

有多种方法可以从Jenkins API中检索数据,具体取决于格式,细节等。

在这个例子中,我将使用Ubuntu构buildpipe道中的一个面向公众的Jenkins服务 。

  1. 使用curljq和命令行sort

    curl -s https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json | jq -r '.jobs[] | [.color, .name] | @csv' | sort

    来自这个pipe道子目录(Precise / All Precise)的输出被parsing,其中blue = pass, red = failure。

    下面是一个输出示例: ... "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" ...

  2. 使用更高级的语言来parsing输出。 XML,Python,Ruby都是可行的select,所有这些都取决于您的使用情况以及您希望如何进一步呈现数据。

这里没有给出任何例子,因为这些术语对于你想要检索的数据以及你想要发送的数据过于宽泛。

**编辑**

在评论中,@shabunc解释说,对于最后完成的构build,渴望是获取信息(仍然不清楚哪些信息或数据正在被search,所以我将用一个例子)。

使用原始调用的depth的API请求修饰符可再次打开原始查询端点的另一个级别的细节。

在这个例子中,我们使用depth=1查询参数扩展同一个stream水线(视图),并为每个作业检索最后完成的内部版本号。

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访问器来select所需的字段,如前面的示例所示。