我们的CI /连续测试系统的一部分需要重新部署构建/测试节点。 到目前为止,我正在将它们标记为离线,然后等待构建通常需要两倍...... 这不是很优雅。
我如何(在将其标记为脱机后)等待节点完成其当前作业?
答案 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秒减少到不到一秒钟。