我正在尝试从远程脚本jenkins获取最后一个内部版本号(针对特定作业)。
我有:
<jenkins url>/api/xml?tree=jobs[name,lastBuild[number]]
生产
<hudson>
<job>
<name>mfg-tools-build-win32</name>
<lastBuild>
<number>220</number>
</lastBuild>
</job>
...
<job>
<name>client-sign</name>
<lastBuild>
<number>103</number>
</lastBuild>
</job>
...
我想获得名称为"客户签名"的作业的编号("103")。
我尝试限制返回的作业条目:
<jenkins url>/api/xml?tree=jobs[name[contains(.,'luna-dev-sa7-evcs-client-sign')],lastBuild[number]]
但这并没有改变输出。
尝试使用我在hudson doc站点上找到的一些xpath:
<jenkins url>/api/xml?xpath=/hudson/job/name/text()[contains(.,%27client-sign%27)]
但这最终给了我一个错误,表明两个节点匹配(有一个标记为"client-sign-copy")。
我需要什么样的xpath来提取最后一个build #?
- 更新**:
根据要求:www.example.comhttps://wiki.eclipse.org/Hudson-ci/help/remote_access_api#XPath_Selection
- 更新2:**
我可能无法做到这一点。我通过处理前面的答案(现在被删除)得到了进一步的结果:
<jenkins url>/api/xml?depth=1&xpath=//job[name = "client-sign"]/lastBuild/number/text()
但是,现在抛出:
primitive XPath result sets forbidden; implement jenkins.security.SecureRequester
除非这也是错误的,我想我又回到了屏幕抓取。
- 更新3-成功(但不使用XPath)**
从this answer中,我可以得出
<jenkins url>/job/client-sign/lastBuild/buildNumber
这给了我103,正如所需要的
2条答案
按热度按时间vs3odd8k1#
可惜alecxe的帖子被删除了--他的思路可能是对的,我们本可以根据工作需要调整他的回答。
尝试将他的XPath修改为您已经尝试过的URL:
nc1teljy2#
根据JENKINS-16877,在Jenkins 1.502中,xpath text()(和.“",如//foo[contains(.,'bar')])由于安全原因被禁用。
我还发现,尝试使用[0]返回多个结果(选择第一个结果)也不能像预期的那样工作。
这意味着除了简单的xpath查询之外,不能执行任何操作。
上面链接中给出的建议是返回完整的XML文档,并使用XMLStarlet或XMLint之类的工具进行本地查询。