我想使用jenkins API来获取有关我当前工作的信息.我可以找到关于最后一个build(.../job/MyJob/lastBuild/api/xml)的信息,但是我没有看到允许我创建进度条的字段.我看到一个estimatedDuration字段和一个building字段,但没有任何东西可以告诉我已经运行了多长时间.
这是给我提供所需信息的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)
我在尝试检索百分比时遇到了这个问题.当我找到解决方案时,我想我会在这里发布.
响应包括两个字段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)
对我来说,也通过获取json来工作:
http://<host>/job/<jobname>/lastBuild/api/json?tree=executor[progress]
Run Code Online (Sandbox Code Playgroud)