4

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

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

4

2 回答 2

3

树查询参数允许您通过使用 XPath-ish 路径表达式显式指定和检索您正在寻找的信息。该值应该是要包含的属性名称列表,子属性位于方括号内。尝试 tree=jobs[name],views[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 ,看看你自己有什么不同。另请注意,由较小深度值创建的数据始终是由较大深度值创建的数据的子集。

由于数据的大小,depth参数真的应该只用于探索Jenkins可以返回哪些数据。一旦确定了要检索的数据,就可以使用树参数来准确指定所需的数据。

我在版本 1.509.4 上。不支持范围说明符。

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

于 2017-12-21T22:06:53.910 回答
2

您可以通过 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 中用于 url 中指定作业的内部版本号 n 到 m。您可以用任何东西代替单词“meep”,这将成为新创建的 xml 对象的包装对象。

获取 api xml 输出后如何收集/操作它?因为这里有一个如何使用 XPath 选择最后 N 个元素的解决方案?. 我尝试使用其中一些 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 版本。2.46.1

于 2017-12-21T20:44:11.550 回答