http://xxx/api/xml?&tree=builds[number,description,result,id,actions[parameters[name,value]]]
以上API返回所有构建ID。有没有办法限制结果以获得最后5个构建IDS?
答案 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。它不支持范围说明符。
答案 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