哈德森cli等待未完成的构建

时间:2010-11-09 01:47:30

标签: continuous-integration hudson hudson-api

我们的CI /连续测试系统的一部分需要重新部署构建/测试节点。 到目前为止,我正在将它们标记为离线,然后等待构建通常需要两倍...... 这不是很优雅。

我如何(在将其标记为脱机后)等待节点完成其当前作业?

2 个答案:

答案 0 :(得分:1)

您可以通过Hudson Remote access API访问作业当前是否正在构建(另请参阅访问http://your-hudson-url/api的文档)。根据您的偏好,API可以返回XML,JSON或python可读格式。

具体来说,您应该查看作业的API。检查API中可用内容的最佳方法是查看您的服务器http://your-hudson-url/job/<job name>/api/xml。每个作业都有一个Hudson正在跟踪的构建(和结果)列表。如果正在构建,构建/构建元素将包含true

以下是我的测试版本的一些示例XML输出,url http://localhost:8080/job/Plotting build/api/xml?depth=1(请注意深度参数设置为1以提供比默认值更多的详细信息):

  <freeStyleProject>
  <action/>
  <description>An example of the plot plugin</description>
  <displayName>Plotting build</displayName>
  <name>Plotting build</name>
  <url>http://localhost:8080/job/Plotting%20build/</url>
  <buildable>true</buildable>
  <build>
    <action>
      <cause>
        <shortDescription>Started by user test</shortDescription>
        <userName>test</userName>
      </cause>
    </action>
    <building>false</building>
    <duration>30291</duration>
    <fullDisplayName>Plotting build #14</fullDisplayName>
    <id>2010-10-29_16-14-02</id>
    <keepLog>false</keepLog>
    <number>14</number>
    <result>SUCCESS</result>
    <timestamp>1288394042180</timestamp>
    <url>http://localhost:8080/job/Plotting%20build/14/</url>
    <builtOn/>
    <changeSet/>
  </build>
  <build>
  ...

我不知道让节点脱机是否有任何影响。我想,只要Hudson知道构建正在进行中,API将返回正确的信息,您可以定期轮询以检查最近的构建是否已完成。


更新:或者,您可以使用API​​查询节点以查看它们是否空闲。但是,据我所知,Hudson API没有显示节点查询输出中正在运行的作业。

http://localhost:8080/computer/(master)/api/xml?depth=1

的输出示例
<masterComputer>
  <displayName>master</displayName>
  <executor>
    <idle>true</idle>
    <likelyStuck>false</likelyStuck>
    <number>0</number>
    <progress>-1</progress>
  </executor>
  ...
  <idle>true</idle>
  ...

如果作业正在运行,计算机/空闲元素为false。在撰写本文时,如果在作业运行时请求depth=1,则会有Hudson bug导致无效响应(尽管默认深度将显示该节点是否处于空闲状态。)

使用节点API,您可以将节点脱机(并重新联机?)作为部署脚本的一部分。

答案 1 :(得分:0)

如果您的脚本是本机的本地脚本,我建议您使用带宽效率更低,处理效率更高的方法。

以@Dave_Bacher为例,我通过运行这样的URL与API的JSON版本进行交互。

http://localhost:8080/job/Plotting build/api/json?depth=1&tree=builds[building,number]

然后你需要做的就是快速浏览JSON,找到你的构建,确定它是建筑物=假还是真的瞧。

这将我的脚本运行时间从10.5秒减少到不到一秒钟。