Continuous integration hudson cli将等待未完成的生成
部分CI/连续测试系统需要重新部署构建/测试节点。 到目前为止,我正在将它们标记为脱机,然后等待构建通常需要的两倍时间…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//
这不是很优雅
如何(在将其标记为脱机后)等待节点完成其当前作业?您可以通过访问来访问作业当前是否正在生成(另请参阅文档)http://your-hudson-url/api)。根据您的偏好,API可以返回XML、JSON或python可读格式 具体来说,您应该查看作业的API。检查API中可用内容的最佳方法是查看服务器,
http://your-hudson-url/job//api/xml
。每个作业都有一个Hudson正在跟踪的构建(和结果)列表。如果生成正在进行,则生成/生成元素将包含true
下面是我的一个测试构建的一些XML输出示例,urlhttp://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>
...