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

Bry*_*ley 9 api jenkins

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

Bry*_*ley 6

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

http://<host>/job/<jobname>/lastBuild/api/xml?tree=timestamp,estimatedDuration
Run Code Online (Sandbox Code Playgroud)

产生的结果如下:

<freeStyleBuild>
  <estimatedDuration>86126</estimatedDuration>
  <timestamp>1350615637401</timestamp>
</freeStyleBuild>
Run Code Online (Sandbox Code Playgroud)

  • 我注意到这仅在构建完成时显示,是否有源可以获取构建完成百分比的实时更新?例如,当一个人启动构建时,我可以模拟另一个网站上的詹金斯进度条吗? (2认同)

Met*_*kin 6

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

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

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

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

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

你使用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);
});
Run Code Online (Sandbox Code Playgroud)


sli*_*kas 6

对我来说,也通过获取json来工作:

http://<host>/job/<jobname>/lastBuild/api/json?tree=executor[progress]
Run Code Online (Sandbox Code Playgroud)