在远程触发构建后如何从Jenkins获得响应

时间:2017-02-16 22:21:06

标签: javascript post jenkins

我试图从我公司的机器上触发jenkins工作,然后如果成功与否则返回。目前我能够通过我创建的URL(隐藏隐私)来触发作业,所以我觉得URL正确并且参数正确传递,并且它们显示在作业的控制台输出和所有内容中没关系。但是,我想知道构建是否成功。

从大多数例子中我看到jenkins的回复,状态代码表示成功(201)。但是,我的回调函数中从未收到任何内容。有什么想法吗?

function onButtonClick()
{
    var JenkinsURL = "http://mycompany:8080/view/project/job/jobname/buildWithParameters?token=TokenHere";

    var params = new Object();
    params.Data1 = "Data";
    params.Data2 = "";
    for (var i = 0; i < list.length; i++) {
        params.Data2 += list[i];
    }

    $.ajax(
    {
      url: JenkinsURL,
      method: 'POST',
      data: params,
      dataType: 'json',
      success: RebootCallback,
      fail: RebootCallback,
    }
    );
}

function RebootCallback(result)
{
    alert(result);
}

1 个答案:

答案 0 :(得分:3)

使用像这样的API触发构建只是将构建排队等待执行。因此,API调用会立即返回,而无需等待构建开始或完成(可能两者都不会发生)。

但是对您的请求的响应将包含一个Location HTTP标头,指向新创建的队列项。例如:

HTTP/1.1 201 Created
Location: http://localhost:8080/queue/item/16/

检查此资源的API网址(即将api/jsonapi/xml附加到网址)将返回有关排队项目的信息。

如果构建仍在队列中,您将看到why原因(例如,等待可用代理),但如果构建已经开始,您将看到executable.url指向构建的字段。例如,已启动的构建的API JSON:

{
  …
  "url": "queue/item/16/",
  "executable": {
    "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
    "number": 16,
    "url": "http://localhost:8080/job/test/4/"
  }
  …
}

如果您获取该版本#4的API网址,则可以检查其result字段以获取构建结果。