Continuous integration hudson cli将等待未完成的生成

Continuous integration hudson cli将等待未完成的生成,continuous-integration,hudson,hudson-api,Continuous Integration,Hudson,Hudson Api,部分CI/连续测试系统需要重新部署构建/测试节点。 到目前为止,我正在将它们标记为脱机,然后等待构建通常需要的两倍时间… 这不是很优雅 如何(在将其标记为脱机后)等待节点完成其当前作业?您可以通过访问来访问作业当前是否正在生成(另请参阅文档)http://your-hudson-url/api)。根据您的偏好,API可以返回XML、JSON或python可读格式 具体来说,您应该查看作业的API。检查API中可用内容的最佳方法是查看服务器,http://your-hudson-url/job//

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


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

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

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

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

如果作业正在运行,计算机/idle元素为
false
。在撰写本文时,如果在作业运行时请求
depth=1
(尽管默认深度将显示节点是否空闲),则会出现一个导致无效响应的错误


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

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

以@Dave_Bacher为例,我将通过运行如下URL与JSON版本的API交互

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

然后,您所要做的就是快速运行JSON,找到您的构建,确定它是building=false还是true,然后瞧


这将我的脚本运行时间从10.5秒缩短到不到一秒。

因此,您使用了混合的生成和测试系统,既可以用作测试系统,也可以用作生成系统?我们的生成任务需要一个小时,生成的映像可以在6分钟内构建系统的其余部分。对某些组件的更改需要通过生成器。在将节点标记为脱机状态后,我可以使用它来轮询作业完成情况,以防止出现任何新作业。@Arthur,是的,根据您使用API的雄心壮志,您也可以自动将节点脱机。
  <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>
  ...
<masterComputer>
  <displayName>master</displayName>
  <executor>
    <idle>true</idle>
    <likelyStuck>false</likelyStuck>
    <number>0</number>
    <progress>-1</progress>
  </executor>
  ...
  <idle>true</idle>
  ...