繁体   English   中英

如何通过API获取正在运行的jenkins作业的进度条数据

[英]how to get progress bar data for a running jenkins job through the API

我想使用jenkins API来获取有关我当前工作的信息。 我可以找到有关上一次构建的信息( .../job/MyJob/lastBuild/api/xml ),但我没有看到可以让我创建进度条的字段。 我看到了一个estimatedDuration字段和一个building字段,但没有任何东西可以告诉我它已经运行了多长时间。

这是给我提供所需信息的URL:

http://<host>/job/<jobname>/lastBuild/api/xml?tree=timestamp,estimatedDuration

产生的结果如下:

<freeStyleBuild>
  <estimatedDuration>86126</estimatedDuration>
  <timestamp>1350615637401</timestamp>
</freeStyleBuild>

我在尝试检索百分比时遇到了这个问题。 当我找到解决方案时,我想我会在这里发布。

响应包括两个字段, timestamp (作业开始的时间)和estimatedDuration持续时间(毫秒)。

如果您使用当前时间,则可以从当前时间中减去timestamp 这将为您提供自作业开始以来的毫秒数。 使用此计算值,您可以将其与estimatedDuration字段进行比较,从而确定完成百分比。

所以公式是(其中data是返回数据的JSON对象):

Console.log(" complete: " + Math.round((new Date().getTime() - data.timestamp) / data.estimatedDuration * 100) + "%");

你使用XML而不是JSON,但我确信它是一个类似的结构。

我在node.js中使用以下lib: https//github.com/jansepar/node-jenkins-api

我的逻辑是:

var jenkinsapi = require('./lib/jenkins');

var jenkins = jenkinsapi.init("http://jenkins.myServer.com:8080");

jenkins.last_result('/myProj', function(err, data) {

  if(err) {
    console.log("last result kitchen_ellipse: ERROR (last result): " + data.statusCode);
    return;
  }

  console.log("progress " + data.fullDisplayName + " number: #" + data.number + 
          + " complete: " + 
            Math.round((new Date().getTime() - data.timestamp) / 
                       data.estimatedDuration * 100) + "%"
          + " result: " + data.result);
});

对我来说,也是通过获得一个json工作:

http://<host>/job/<jobname>/lastBuild/api/json?tree=executor[progress]

使用以下:

 http://<host>/job/<jobname>/lastBuild/api/xml?depth=1&xpath=*/executor/progress/text()

这将返回百分比的进度

例如:27

类似地,您可以获得其他参数,如用户,ID(内部版本号),时间戳等。

你可以使用以下网址找到它们:

http://<host>/job/<jobname>/lastBuild/api/xml?depth=1

上面的url返回一个xml,其中列出了上一次构建的所有必需参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM