解析Jenkins XML

dl5txlt9  于 2023-01-16  发布在  Jenkins
关注(0)|答案(2)|浏览(159)

我正在尝试从远程脚本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,正如所需要的

vs3odd8k

vs3odd8k1#

可惜alecxe的帖子被删除了--他的思路可能是对的,我们本可以根据工作需要调整他的回答。
尝试将他的XPath修改为您已经尝试过的URL:

http://172.20.18.219:8080/api/xml?xpath=/hudson/job[name=%27client-sign%27]/lastBuild/number/text()
nc1teljy

nc1teljy2#

根据JENKINS-16877,在Jenkins 1.502中,xpath text()(和.“",如//foo[contains(.,'bar')])由于安全原因被禁用。
我还发现,尝试使用[0]返回多个结果(选择第一个结果)也不能像预期的那样工作。
这意味着除了简单的xpath查询之外,不能执行任何操作。
上面链接中给出的建议是返回完整的XML文档,并使用XMLStarlet或XMLint之类的工具进行本地查询。

相关问题