through - cómo obtener los datos de la barra de progreso para ejecutar un trabajo jenkins a través de la API
parametros jenkins (4)
Aquí está la URL que me proporciona la información que necesito:
http://<host>/job/<jobname>/lastBuild/api/xml?tree=timestamp,estimatedDuration
Que produce algo así como:
<freeStyleBuild>
<estimatedDuration>86126</estimatedDuration>
<timestamp>1350615637401</timestamp>
</freeStyleBuild>
Quiero usar la API de jenkins para obtener información sobre mis trabajos actuales. Puedo encontrar información sobre la última compilación ( .../job/MyJob/lastBuild/api/xml
) pero no veo los campos que me permitirían crear una barra de progreso. Veo un campo de estimatedDuration
y un campo de building
, pero nada que me diga cuánto tiempo ya se ha estado ejecutando.
use lo siguiente:
http://<host>/job/<jobname>/lastBuild/api/xml?depth=1&xpath=*/executor/progress/text()
esto te devolverá el progreso en porcentaje
ex: 27
de manera similar, puede obtener otros parámetros como usuario, id (número de compilación), marca de tiempo, etc.
puedes encontrarlos usando la siguiente url:
http://<host>/job/<jobname>/lastBuild/api/xml?depth=1
above url devuelve un xml donde se enumeran todos los parámetros necesarios, desde la última compilación.
Me encontré con esta pregunta al tratar de recuperar el porcentaje. Cuando encontré una solución, pensé que la publicaría aquí.
La respuesta incluye dos campos, timestamp
tiempo (hora de inicio del trabajo) y fecha estimatedDuration
(milisegundos).
Si toma la hora actual, puede restar la timestamp
de timestamp
de la hora actual. Esto le dará la cantidad de milisegundos desde que comenzó el trabajo. Usando este valor calculado, puede compararlo con el campo de estimatedDuration
y así determinar el porcentaje completado.
Entonces la fórmula sería (donde los datos son un objeto JSON de los datos devueltos):
Console.log(" complete: " + Math.round((new Date().getTime() - data.timestamp) / data.estimatedDuration * 100) + "%");
Estás usando XML y no JSON, pero estoy seguro de que es una estructura similar.
Estoy usando la siguiente lib en node.js: https://github.com/jansepar/node-jenkins-api
Mi lógica es:
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);
});
Para mí también está trabajando obteniendo un json:
http://<host>/job/<jobname>/lastBuild/api/json?tree=executor[progress]