我的目标是获取具有特定参数的最新Jenkins职位(职位名称hanna)。
我这样做的唯一原因是Jenkins从脚本触发时不返回内部版本号,因此我必须传递一个参数,但稍后必须能够对该参数进行查询。
现在我有Rigth,它不返回构建ID:
curl -X POST 'http://server:8080/api/xml?tree=jobs[name,builds[actions[parameters[name,value]]]]&xpath=/hudson/job[build/action/parameter[name="snapshot"][value="bb"]]&pretty=true'
我得到这样的工作清单:
<job><name>hanna</name><build><action><parameter><name>snapshot</name><value>bb</value></parameter></action><action/><action/><action/><action/></build><build><action><parameter><name>snapshot</name><value>bb</value></parameter></action><action/><action/><action/><action/></build><build><action><parameter><name>snapshot</name><value>aa</value></parameter></action><action/><action/><action/><action/><action/></build><build><action/><action/><action/><action/></build></job>⏎
这不完全是我想要的,因为我也想使用参数来完成作业hanna的最新实例snapshot=bb,该返回snap=aa也将返回,而且我也无法弄清楚Jenkins上存储的版本ID。有人可以告诉我吗?
snapshot=bb
snap=aa
如果您绝对需要使用Jenkins Rest api调用来查询包含特定构建参数的特定内部版本号,请使用以下查询:
http://localhost:8080/job/MyJenkinsJob/api/xml?tree=builds[actions[parameters[value]],number]&xpath=//build[action[parameter[value="MyParameterValue"]]]/number
这应该返回类似:
<number>49</number>
如果您想了解有关XPath过滤的更多信息,请参见此处的一些示例。
替代方法
要回答您的原始问题“当我从脚本中触发时,我这样做的唯一原因就是詹金斯不返回内部版本号”
您可以使用“ -i”参数运行curl。执行此操作时,您应该看到返回了队列ID#。
例如: curl -X POST -i http//localhost:8080/job/test123/buildWithParameters?aaa=ABC
curl -X POST -i http//localhost:8080/job/test123/buildWithParameters?aaa=ABC
返回值: HTTP / 1.1 201创建 日期:2016年8月17日星期三03:15:28 GMT X-Content-Type-Options:nosniff 位置:http:// localhost:8080 / queue / item / 44 / Content-Length:0 伺服器:Jetty(9.2.z-SNAPSHOT)
有了此队列ID,您可以通过以下步骤获取内部版本号: http://localhost:8080/queue/item/44/api/xml
http://localhost:8080/queue/item/44/api/xml
哪个应该返回带有您要查找的数字的XML。
例如:
<leftItem> ... <executable _class="hudson.model.FreeStyleBuild"> <number>11</number> <url>http://localhost:8080/job/test123/11/</url> </executable> </leftItem>