0

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

我如何(在将其标记为离线后)等待节点完成其当前工作?

4

2 回答 2

1

您可以通过Hudson 远程访问 API 访问当前是否正在构建作业(也可以通过访问查看文档http://your-hudson-url/api)。根据您的偏好,API 可以返回 XML、JSON 或 python 可读格式。

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

这是我的测试版本 url 的一些示例 XML 输出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是否正在运行。在撰写本文时,有一个Hudson 错误,如果您在作业运行时请求,则会导致无效响应depth=1(尽管默认深度将显示节点是否空闲)。

使用节点 API,您可以将节点离线(然后重新在线?)作为部署脚本的一部分。

于 2010-11-09T20:26:02.247 回答
0

如果您的脚本是机器本地的,我建议您使用带宽效率更高、处理效率更高的方式来执行此操作。

以@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 秒减少到不到一秒。

于 2012-09-11T08:36:37.883 回答