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

如何将Jenkins API响应限制为最后n个构建ID,jenkins,jenkins-api,Jenkins,Jenkins Api,上面的API返回所有构建ID。有没有办法限制结果以获得最后5个内部版本ID?您可以使用内部版本号创建一个xml对象,并通过不同的方法自己解析它 创建如下所示的xml: <meep> <number>n</number> <number>n+1</number> ... <number>m</number> </meep> N n+1 ... M 并将


上面的API返回所有构建ID。有没有办法限制结果以获得最后5个内部版本ID?

您可以使用内部版本号创建一个xml对象,并通过不同的方法自己解析它

创建如下所示的xml:

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

N
n+1
...
M
并将使用url中指定作业当前在jenkins中的内部版本号n到m填充。您可以用任何东西代替单词“meep”,它将成为新创建的xml对象的包装器对象

一旦获得api xml输出,您将如何收集/操作它?因为这里有一个解决方案。我尝试使用一些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 ""}';
#/垃圾箱/垃圾箱
#注意:要使用curl获得url,您需要一个有效的jenkins用户和api令牌
#将所有内部版本号放入名为build_id的变量中
build_-ids=“$(curl-sL--user${{u-jenkins\u-api\u-user}:${{u-jenkins\u-api\u-token}\
“${u jenkins_url}/job/${u job_name}/api/xml?xpath=//build/number&wrapper=meep”\
|sed-e的//]*>//g'| sed-e的///g')”
#使用awk打印最后5项
echo“${build_ids}”|awk'{n=5;for(-n;n>=0;n--){printf“%s\t”,“$(NF-n)}print”“}”;
一旦有了xml对象,就可以按自己的意愿对其进行解析


注:我正在运行Jenkins ver。2.46.1

树查询参数允许您通过使用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,看看两者之间的区别。还要注意,由较小深度值创建的数据始终是由较大深度值创建的数据的子集

由于数据的大小,深度参数实际上应该只用于探索Jenkins可以返回哪些数据。一旦确定了要检索的数据,就可以使用tree参数精确指定所需的数据

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


来源:

这是对我的回答的评论,还是你最终找到的解决问题的答案?如果这是一个答案,你应该考虑接受它,所以这个问题有一个可接受的答案。