Jenkins XML REST API按作业名称过滤查询作业名与最后构建号
解决Jenkins API按作业名称过滤并获取最后构建号的问题
我来帮你搞定这个Jenkins API过滤失效的问题!你的原请求没实现作业名称过滤,是因为XPath的写法不符合Jenkins XML API的预期,咱们来调整一下:
问题根源
原请求里的xpath=/hudson/job和includes参数组合逻辑不对。Jenkins的XML API中,xpath参数需要直接定位到符合过滤条件的job节点,而不是先拉取所有job再用includes二次筛选。
正确的XML API请求
把XPath改成直接筛选包含指定名称的job节点,请求地址如下:
https://blahblahxxxxx/jenkins/api/xml?tree=jobs[displayName,lastBuild[number]]&xpath=/hudson/job[contains(displayName/text(),'myjobnamefilter')]&wrapper=job_names&pretty=true
这里的关键是XPath表达式:/hudson/job[contains(displayName/text(),'myjobnamefilter')],它会直接匹配hudson根节点下,displayName文本包含myjobnamefilter的所有job节点。
可选方案:用JSON API更简洁
如果觉得XML处理麻烦,Jenkins的JSON API支持更直观的过滤语法,请求如下:
https://blahblahxxxxx/jenkins/api/json?tree=jobs[displayName,lastBuild[number]]&filter=jobs[displayName~myjobnamefilter]&pretty=true
displayName~表示模糊匹配(支持正则),如果需要精确匹配可以换成displayName=- 返回的JSON结构会直接包含符合条件的作业及其最后构建号,处理起来更方便
预期返回结果示例
调整后的请求会只返回符合过滤条件的作业,比如XML格式的返回大致如下:
<job_names> <job> <displayName>myjobnamefilter-demo</displayName> <lastBuild> <number>78</number> </lastBuild> </job> <job> <displayName>prod-myjobnamefilter</displayName> <lastBuild> <number>234</number> </lastBuild> </job> </job_names>
内容的提问来源于stack exchange,提问作者datastax
相关产品推荐
相关产品推荐

