我如何使用指定的参数在 jenkins 中获取最新版本
how do i get the latest build in jenkns with a specified parameter
我的目标是获取具有特定参数的最新 Jenkins 作业(作业名称 hanna)。
我这样做的唯一原因是当我从我的脚本触发时 Jenkins 没有 return 内部版本号,所以我必须传入一个参数,但我必须能够查询稍后针对该参数。
现在我有了这个,它没有 return 构建 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>⏎
这不是我想要的,因为我想要带有参数 snapshot=bb
的作业 hanna 的最新实例,这个 return snap=aa
也是如此,而且我也想不通out 构建 ID 在 Jenkins 上的存储位置。有人可以告诉我吗?
如果您绝对需要使用 Jenkins Rest api 调用来查询包含特定构建参数的特定构建号,请使用以下查询:
http://localhost:8080/job/MyJenkinsJob/api/xml?tree=builds[actions[parameters[value]],number]&xpath=//build[action[parameter[value="MyParameterValue"]]]/number
这应该return类似于:
<number>49</number>
如果您想了解有关 XPath 过滤的更多信息,请查看一些示例 here。
替代方法
回答你原来的问题"the only reason why im doing this is jenkins do not return a build number when i trigger from my script,"
您可以做的是 运行 使用“-i”参数卷曲。当你这样做时,你应该看到一个队列项目 id # returned。
例如:
curl -X POST -i http//localhost:8080/job/test123/buildWithParameters?aaa=ABC
Returns:
HTTP/1.1 201 已创建
日期:2016 年 8 月 17 日星期三 03:15:28 GMT
X 内容类型选项:nosniff
地点:http://localhost:8080/queue/item/44/
内容长度:0
服务器:Jetty(9.2.z-SNAPSHOT)
有了这个队列 ID,您可以通过以下方式获取内部版本号:
http://localhost:8080/queue/item/44/api/xml
哪个应该 return 一个 XML 与您正在寻找的号码。
例如:
<leftItem>
...
<executable _class="hudson.model.FreeStyleBuild">
<number>11</number>
<url>http://localhost:8080/job/test123/11/</url>
</executable>
</leftItem>
我的目标是获取具有特定参数的最新 Jenkins 作业(作业名称 hanna)。
我这样做的唯一原因是当我从我的脚本触发时 Jenkins 没有 return 内部版本号,所以我必须传入一个参数,但我必须能够查询稍后针对该参数。
现在我有了这个,它没有 return 构建 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>⏎
这不是我想要的,因为我想要带有参数 snapshot=bb
的作业 hanna 的最新实例,这个 return snap=aa
也是如此,而且我也想不通out 构建 ID 在 Jenkins 上的存储位置。有人可以告诉我吗?
如果您绝对需要使用 Jenkins Rest api 调用来查询包含特定构建参数的特定构建号,请使用以下查询:
http://localhost:8080/job/MyJenkinsJob/api/xml?tree=builds[actions[parameters[value]],number]&xpath=//build[action[parameter[value="MyParameterValue"]]]/number
这应该return类似于:
<number>49</number>
如果您想了解有关 XPath 过滤的更多信息,请查看一些示例 here。
替代方法
回答你原来的问题"the only reason why im doing this is jenkins do not return a build number when i trigger from my script,"
您可以做的是 运行 使用“-i”参数卷曲。当你这样做时,你应该看到一个队列项目 id # returned。
例如:
curl -X POST -i http//localhost:8080/job/test123/buildWithParameters?aaa=ABC
Returns:
HTTP/1.1 201 已创建
日期:2016 年 8 月 17 日星期三 03:15:28 GMT
X 内容类型选项:nosniff
地点:http://localhost:8080/queue/item/44/
内容长度:0
服务器:Jetty(9.2.z-SNAPSHOT)
有了这个队列 ID,您可以通过以下方式获取内部版本号:
http://localhost:8080/queue/item/44/api/xml
哪个应该 return 一个 XML 与您正在寻找的号码。
例如:
<leftItem>
...
<executable _class="hudson.model.FreeStyleBuild">
<number>11</number>
<url>http://localhost:8080/job/test123/11/</url>
</executable>
</leftItem>