如何从Jenkins构建请求中获取JSON对象

时间:2013-01-02 23:29:27

标签: json bash build jenkins

类似于http://localhost/jenkins/job/job_name/25/api/json如何使用构建26的详细信息返回JSON对象,是否有办法在第一次启动作业时获取类似对象,即在您知道构建之前号码是?

我注意到来自构建网址的curl发布请求的输出返回包含内部版本号的html;但是,我宁愿不必解析这个问题,而是支持拥有内置编号的JSON对象。目前,我正在使用:

curl -v --data "param1=value&param2=value" \
http://localhost/jenkins/job/job_name/buildWithParameters

启动工作正常并输出一堆html。有没有办法开始这个工作并收到一个带有内部版本号的JSON对象?

4 个答案:

答案 0 :(得分:6)

在所有情况下,nextBuildNumber可能不是正确的内部版本号。如果您触发了同一个Job的两个不同版本,我们不知道哪个版本首先被触发。这里有竞争条件。检查构建队列可能也不会提供正确的内部版本号。

答案 1 :(得分:1)

如果您查询http://localhost/jenkins/job/job_name/api/json,您可以随时获取nextBuildNumber字段,以便为您提供下一个内部版本号。

当你触发构建时,你可以放心,构建将获得这个数字。

答案 2 :(得分:1)

一旦触发了构建,您就可以从以下位置获取其URL:

http://localhost/jenkins/job/job_name/api/json?tree=lastBuild[url]

如果有的话,这将返回正在运行的构建,否则返回最新完成的构建。然后,您可以将“/ api / json”添加到该URL以获取构建的JSON对象。

答案 3 :(得分:0)

在我的场景中,我需要一个JSONP数据类型来完成。我所做的是从Jenkins那里得到我特定工作的原始对象,这样我就可以根据需要进行操作。

请求:

$.ajax({
  url: "http://<jenkins server>/job/<job name>/api/json?jsonp=?",
  dataType: 'jsonp',
  success: success
});  

成功电话:

var success = function(json) {

 console.log('Raw JSON object for this job:');
 console.log(json);    
}

然后,获取您需要的信息,例如:

console.log(json.lastCompletedBuild.number);
console.log(json.lastBuild.url);