在Jenkins中通过API计算剩余构建百分比的最佳方法?

时间:2014-12-22 23:08:27

标签: json jenkins

使用基于URL的调用来检索Jenkins上的构建状态 - 计算构建中剩余百分比的最简洁,最简单的方法是什么?

我已经查看了使用estimatedDuration从返回的JSON中使用timestamp,然后根据服务器的当前时间戳计算它,但我遇到了问题,因为我的调用服务器时间戳是关闭的来自jenkins服务器timestamp的内容(更不用说TZ差异,服务器托管不同的提供商/我无法直接解决时间戳问题)..除此之外,依赖于两个似乎有点宽松如果可以避免的话,不同的服务器时间戳计算任何东西..

其他信息: 我使用的Jenkins JSON网址采用以下格式:http://{jenkins_serverurl}/job/{jenkins_job_name}/{jenkins_job_number}/api/json

它包含上面提到的estimatedDuration和(作业开始)timestamp。我试图用它来实时显示詹金斯建造时估计的剩余百分比。

1 个答案:

答案 0 :(得分:1)

我认为跟踪构建的一种简单方法是从jenkins public(在我的配置上)ajax调用查看构建队列的HTML版本和执行程序。它是进度条的实际HTML。百分比被发现为内联CSS属性。具体来说,您要查看的是在此端点上找到的执行程序:

POST /ajaxExecutors HTTP/1.1
Host: [JENKINS URL]
Content-Length: 0
Pragma: no-cache
Cache-Control: no-cache
Origin: [JENKINS URL]
User-Agent: Mozilla/5.0 (X11; Linux x86_64)
Content-type: application/x-www-form-urlencoded; charset=UTF-8
Accept: text/javascript, text/html, application/xml, text/xml, */*
X-Prototype-Version: 1.7
X-Requested-With: XMLHttpRequest
Referer: [JENKINS URL]
Accept-Language: en-US,en;q=0.8
Cookie: [COOKIE INFO IF YOU NEED IT]

您将获得进度条的HTML表示。您想要寻找的关键部分是:

...
<td class="pane">
  <div style="white-space: normal">
    <a href="/job/jenkins_cron/">jenkins<wbr>_cron</a>
    <table class="progress-bar" style="cursor:pointer">
      <tbody>
        <tr>
          <td class="progress-bar-done" style=
              "width:17%;"></td>

          <td class="progress-bar-left" style=
              "width:83%"></td>
        </tr>
      </tbody>
    </table>
  </div>
</td>
...

我要做的是在&#34;进度条完成&#34;下取出与style相关联的td。类。你可以使用类似的东西:

h=[ajaxExecutors RESPONSE BODY]

from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(h)
found = soup.find("td", { "class" : "progress-bar-done" })
# -> <td class="progress-bar-done" style="width:17%;"></td>
percent_progress = re.findall( 'width:([0-9]+)%', str(found))[0]
# -> 17

注意:在运行多个构建时,您必须解析tr表。此外,没有错误检查,因此如果构建没有运行,您将需要单独处理该案例。