从Jenkins,我如何获得JSON中当前正在运行的作业的列表?

时间:2013-02-12 23:33:05

标签: jenkins

我可以通过Remote API找到关于Jenkins服务器的所有内容,但不能找到当前正在运行的作业列表。

这,

http://my-jenkins/computer/api/json

http://my-jenkins/computer/(master)/api/json

看起来似乎是最合乎逻辑的选择,但他们没有说(除了工作数量)关于哪些工作实际上正在运行。

6 个答案:

答案 0 :(得分:48)

Jenkins中的作业版本之间经常存在混淆,尤其是因为作业通常被称为“构建作业”。

  • 作业(或“构建作业'项目'”)包含描述要运行的内容及其运行方式的配置。
  • 构建是作业的执行。构建包含有关开始和结束时间,状态,日志记录等的信息。

有关详细信息,请参阅https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project

如果您想要正在构建的作业(即有一个或多个正在运行的版本),最快的方法是使用带有XPath的REST API进行过滤以_anime结尾的颜色,如下所示:

http://jenkins.example.com/api/xml?tree=jobs[name,url,color]&xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&wrapper=jobs

会给你一些类似的东西:

<jobs>
  <job>
    <name>PRE_DB</name>
    <url>http://jenkins.example.com/job/my_first_job/</url>
    <color>blue_anime</color>
  </job>
  <job>
    <name>SDD_Seller_Dashboard</name>
    <url>http://jenkins.example.com/job/my_second_job/</url>
    <color>blue_anime</color>
  </job>
</jobs>

Jenkins使用color字段来指示作业的状态,其中_anime后缀表示作业当前正在构建。

不幸的是,这不会为您提供有关实际运行构建的任何信息。作业的多个实例可能同时运行,并且正在运行的构建并不总是最后一个。

如果要列出所有正在运行的版本,您还可以使用REST API快速获得答案,如下所示:

http://jenkins.example.com/computer/api/xml?tree=computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]&xpath=//url&wrapper=builds

会给你类似的东西:

<builds>
  <url>http://jenkins.example.com/job/my_first_job/1412/</url>
  <url>http://jenkins.example.com/job/my_first_job/1414/</url>
  <url>http://jenkins.example.com/job/my_second_job/13126/</url>
</builds>

在这里,您可以看到所有当前正在运行的构建的列表。您需要解析URL以将作业名称与内部版本号分开。请注意my_first_job有两个当前正在运行的构建。

答案 1 :(得分:20)

我有一个使用View Job Filters Plugin定义的视图,它只过滤当前正在运行的作业,然后您可以在视图页面上使用/api/json来查看正在运行的作业。我也有一个流产,不稳定等等。

<强>更新

选择编辑视图 作业过滤器 添加作业过滤器 构建状态过滤
 构建状态:☑当前正在构建
 匹配类型排除不匹配 - ...

答案 2 :(得分:10)

有点黑客,但我认为当你在GET进行/jenkins/api/json?pretty=true时,可以通过查看作业对象中的颜色键来推断当前正在运行的作业。如果Jenkins中给定作业的“球”图标是动画的,我们知道它正在运行。

查看JSON响应中的作业对象数组:

{
 ...
  "jobs" : [
    {
      "name" : "Test Job 1",
      "url" : "http://localhost:8000/jenkins/job/Test%20Job%201/",
      "color" : "blue"
    },
    {
      "name" : "Test Job 2",
      "url" : "http://localhost:8000/jenkins/job/Test%20Job%202/",
      "color" : "blue_anime"
    }
  ...
}

在这种情况下,"color" : "blue_anime"表示作业当前正在运行,"color" : "blue"表示作业未运行。

希望这有帮助。

答案 3 :(得分:8)

您可以使用jenkins树api执行此操作,使用如下端点:

http://<host>/api/json?tree=jobs[name,lastBuild[building,timestamp]]

如果您访问lastBuild,则可以查看<job-endpoint>/lastBuild/api/json可以使用的属性。

答案 4 :(得分:5)

输出并过滤“building:true”,从以下调用json api开始,使用树来过滤掉多余的东西(希望这有帮助):

http://jenkins.<myCompany>.com/job/<myJob>/api/json?pretty=true&depth=2&tree=builds[builtOn,changeSet,duration,timestamp,id,building,actions[causes[userId]]]

会给你一些类似的东西:

{
  "builds" : [
{
  "actions" : [
    {

    },
    {
      "causes" : [
        {
          "userId" : "cheeseinvert"
        }
      ]
    },
    {

    },
    {

    },
    {

    },
    {

    }
  ],
  "building" : true,
  "duration" : 0,
  "id" : "2013-05-07_13-20-49",
  "timestamp" : 1367958049745,
  "builtOn" : "serverA",
  "changeSet" : {

  }
}, ...

答案 5 :(得分:3)

我有一个类似的问题,一些管道构建在我重新启动jenkins后陷入了构建状态(piepline作业应该是持久的并且恢复,但大部分时间它们会被无限期地卡住)。

这些构建不使用执行程序,因此找到它们的唯一方法是打开每个作业。

当项目被认为是建筑时,所有其他答案似乎都有效,即:最后一个建筑正在建造。但他们忽略了过去的建筑仍在建设中。

以下查询适用于我,并为我提供了所有当前正在运行的版本,即:它们没有结果。

http://localhost:8080/api/xml?tree=jobs[name,builds[fullDisplayName,id,number,timestamp,duration,result]]&xpath=/hudson/job/build[count(result)=0]&wrapper=builds