【发布时间】:2019-03-21 19:10:55
【问题描述】:
我正在尝试调用 Jenkins XML API 以从其 REST 端点检索特定的信息集(... 表示内容中存在类似的同级元素,但为简洁起见将其排除在外):
<workflowRun _class="org.jenkinsci.plugins.workflow.job.WorkflowRun">
<action _class="hudson.model.CauseAction">
<cause _class="hudson.triggers.TimerTrigger$TimerTriggerCause">
<shortDescription>Started by timer</shortDescription>
</cause>
</action>
<action _class="hudson.model.ParametersAction">
<parameter _class="hudson.model.StringParameterValue">
<name>projectName</name>
<value>My-Proj</value>
</parameter>
<parameter _class="hudson.model.StringParameterValue">
<name>NodeParam</name>
<value>UY-DO1</value>
</parameter>
...
</action>
<action/>
<action/>
<action/>
<action/>
<action _class="org.jenkinsci.plugins.workflow.cps.EnvActionImpl"/>
<action/>
<action _class="hudson.tasks.junit.TestResultAction">
<failCount>21</failCount>
<skipCount>6</skipCount>
<totalCount>223</totalCount>
<urlName>myReport</urlName>
</action>
<action/>
<action/>
<action/>
<action _class="org.jenkinsci.plugins.workflow.job.views.FlowGraphAction"/>
<action/>
<action/>
<building>false</building>
...
<result>FAILURE</result>
<timestamp>1553145960340</timestamp>
...
</workflowRun>
我只对获取以下信息感兴趣:
<action _class="hudson.tasks.junit.TestResultAction">
<failCount>21</failCount>
<skipCount>6</skipCount>
<totalCount>223</totalCount>
<urlName>myReport</urlName>
</action>
<timestamp>1553145960340</timestamp>
但是,我找不到一次性获取所有这些数据的 XPath 命令。我可以运行两个单独的调用来检索所需的信息,但这需要两个单独的服务器行程。我想知道是否有一个 XPath 命令可以用来一次性检索目标 <action> 和 <timestamp>:
https://jenkins_host/job/MyApp/job/Some_Jenkins_Job/lastCompletedBuild/api/xml?xpath=/workflowRun/action[@_class='hudson.tasks.junit.TestResultAction']
这得到了我们:
<action _class="hudson.tasks.junit.TestResultAction">
<failCount>21</failCount>
<skipCount>6</skipCount>
<totalCount>223</totalCount>
<urlName>myReport</urlName>
</action>
和时间戳分开(注意从xpath切换到tree):
https://jenkins_host/job/MyApp/job/Some_Jenkins_Job/lastCompletedBuild/api/xml?tree=timestamp
结果为:
<workflowRun _class="org.jenkinsci.plugins.workflow.job.WorkflowRun">
<timestamp>1553145960340</timestamp>
</workflowRun>
我尝试使用tree 和xpath 的组合,但出现错误:
https://jenkins_host/job/MyApp/job/Some_Jenkins_Job/lastCompletedBuild/api/xml?tree=timestamp&xpath=/workflowRun/action[@_class='hudson.tasks.junit.TestResultAction']
似乎它们不能混淆。我什至尝试使用它无济于事:
xml?xpath=/workflowRun/action[@_class='hudson.tasks.junit.TestResultAction']&/workflowRun/timestamp
或
xml?xpath=/workflowRun/action[@_class='hudson.tasks.junit.TestResultAction']&xpath=/workflowRun/timestamp
知道如何使用单个 XPath 获取两组数据吗?
【问题讨论】: