我可以通过远程 API 找到关于我的 Jenkins 服务器的所有信息,但不能找到当前正在运行的作业列表。
这,
http://my-jenkins/computer/api/json
或者
http://my-jenkins/computer/(master)/api/json
似乎是最合乎逻辑的选择,但他们没有说明哪些作业正在实际运行(除了作业数)。
我可以通过远程 API 找到关于我的 Jenkins 服务器的所有信息,但不能找到当前正在运行的作业列表。
这,
http://my-jenkins/computer/api/json
或者
http://my-jenkins/computer/(master)/api/json
似乎是最合乎逻辑的选择,但他们没有说明哪些作业正在实际运行(除了作业数)。
在 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
当前正在运行的两个构建。
GET
有点技巧,但我认为您可以通过在执行at时查看作业对象中的颜色键来推断当前正在运行的作业/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"
表示该作业没有运行。
希望这可以帮助。
从以下对 json api 的调用中编组输出并过滤“building: true”,以过滤掉无关的东西(希望这会有所帮助):
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" : {
}
}, ...
您可以使用 jenkins tree api 执行此操作,使用如下端点:
http://<host>/api/json?tree=jobs[name,lastBuild[building,timestamp]]
lastBuild
如果您访问,您可以查看可以使用的属性<job-endpoint>/lastBuild/api/json
。
我有一个类似的问题,在我重新启动 jenkins 后,一些管道构建卡在构建状态(管道作业应该是持久的并且可以恢复,但大多数情况下它们会无限期地卡住)。
这些构建不使用执行器,因此找到它们的唯一方法是打开每个作业。
当考虑构建项目时,所有其他答案似乎都有效,即:最后一个构建正在构建。但他们忽略了过去仍在建造的建筑。
以下查询对我有用,并为我提供了所有当前正在运行的构建,即:它们没有结果。