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

Bet*_*vis 1 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);
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*Orr 7

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

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

HTTP/1.1 201 Created
Location: http://localhost:8080/queue/item/16/
Run Code Online (Sandbox Code Playgroud)

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

如果构建仍在队列中,您将看到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/"
  }
  …
}
Run Code Online (Sandbox Code Playgroud)

如果您获取该构建 #4 的 API URL,您将能够检查其result字段以获取构建结果。