如何将Jenkins API响应限制为最后n个构建ID

时间:2017-12-21 17:49:34

标签: jenkins jenkins-api

http://xxx/api/xml?&tree=builds[number,description,result,id,actions[parameters[name,value]]]

以上API返回所有构建ID。有没有办法限制结果以获得最后5个构建IDS?

2 个答案:

答案 0 :(得分:2)

树查询参数允许您通过使用XPath-ish路径表达式显式指定和检索您要查找的信息。该值应该是要包含的属性名称列表,其中子属性在方括号内。尝试tree = jobs [name],查看[name,jobs [name]]只查看作业列表(仅提供名称)和视图(给出它们包含的名称和作业)。注意:对于数组类型属性(例如本例中的作业),名称必须以原始复数形式给出,而不是单数形式,因为元素将出现在XML()中。这对于例如更自然。 json?tree = jobs [name]无论如何:JSON编写器不进行复数到单数的修改,因为数组是明确表示的。

对于数组类型属性,支持范围说明符。例如,tree = jobs [name] {0,10}将检索前10个作业的名称。范围说明符具有以下变体:

{M,N}:从第M个元素(包括)到第N个元素(不包括)。 {M,}:从第M个元素(包括)到结尾。 {,N}:从第一个元素(包括)到第N个元素(不包括)。与{0,N}相同。 {N}:只检索第N个元素。与{N,N + 1}相同。 检索更多数据的另一种方法是使用depth = N查询参数。这将检索到指定深度的所有数据。比较depth = 0和depth = 1,看看你自己的区别。另请注意,由较小深度值创建的数据始终是由较大深度值创建的数据的子集。

由于数据的大小,深度参数应该仅用于探索Jenkins可以返回的数据。一旦确定了要检索的数据,就可以提出树参数来准确指定所需的数据。

我的版本是1.509.4。它不支持范围说明符。

来源:http://ci.citizensnpcs.co/api/

答案 1 :(得分:1)

您可以使用内部版本号via xpath创建一个xml对象,并通过不同方式自行解析。

http://xxx/api/xml?xpath=//build/number&wrapper=meep

创建一个类似于:

的xml
<meep>
     <number>n</number>
     <number>n+1</number>
      ...
     <number>m</number> 
</meep>

并且将填充目标为jenkins的构建号n到m,用于url中的指定作业。你可以用任何东西替换“meep”这个词,它将成为新创建的xml对象的包装器对象。

一旦得到它,你如何收集/操作api xml输出?因为这里有How do I select the last N elements with XPath?的解决方案。我尝试使用其中一些xpath操作,但在浏览器中使用url时我无法使用它;如果你正在做其他事情,那可能会有用。

当我获得xml对象时,我碰巧通过shell脚本操作它。

#!/bin/sh

# NOTE: To get the url to work with curl, you need a valid jenkins user and api token
# Put all build numbers in a variable called build_ids
build_ids="$(curl -sL --user ${_jenkins_api_user}:${_jenkins_api_token} \
    "${_jenkins_url}/job/${_job_name}/api/xml?xpath=//build/number&wrapper=meep" \
    | sed -e 's/<[^>]*>/ /g' | sed -e 's/  / /g')"

# Print the last 5 items with awk
echo "${build_ids}" | awk '{n = 5; for (--n; n >= 0; n--){ printf "%s\t",$(NF-n)} print ""}';

拥有xml对象后,您可以根据需要进行解析。

注意:我正在运行Jenkins ver。 2.46.1