22

是否有 API 可以确定给定作业当前是否正在运行?

理想情况下,我还希望能够确定其估计的完成百分比,并获得 SVN 修订号的详细信息并提交评论!

编辑:

我找到了答案。http://host/job/project/lastBuild/api/几乎所有我需要的东西都在它的某个地方!如果您启动手动构建,它不会告诉您 SCM 变更集,但这是有道理的。它仍然会告诉您最新的 SCM 版本,这很好。总而言之,对于我现在的目的来说已经足够好了。

4

6 回答 6

22

正如 gareth_bowles 和 Sagar 所说,使用 Jenkins API 是一种了解方式。如果将深度设置为 1,您将看到要查找的内容:

http://host/job/project/lastBuild/api/xml?depth=1

你会看到有一个<building>标签告诉你构建是否正在运行

...
<build>
  <action>
    <cause>
        <shortDescription>Started by user Zageyiff</shortDescription>
        <userId>Zageyiff</userId>
        <userName>Zageyiff</userName>
    </cause>
  </action>
  <building>true</building>
  <duration>0</duration>
  <estimatedDuration>-1</estimatedDuration>
  <fullDisplayName>Project #12</fullDisplayName>
  <id>2012-08-24_08-58-45</id>
  <keepLog>false</keepLog>
  <number>12</number>
  <timestamp>123456789</timestamp>
  <url>
        http://host/job/project/12
  </url>
  <builtOn>master</builtOn>
  <changeSet/>
  <mavenVersionUsed>3.0.3</mavenVersionUsed>
</build>
...
于 2012-08-24T13:11:31.790 回答
7

我正在使用 Groovy 插件,并将以下代码段作为系统运行:

import hudson.model.*
def version = build.buildVariableResolver.resolve("VERSION")
println "VERSION=$version"
def nextJobName = 'MY_NEXT_JOB'
def nextJob = Hudson.instance.getItem(nextJobName)
def running = nextJob.lastBuild.building
if (running) {
   println "${nextJobName} is already running. Not launching"
} else {
   println "${nextJobName} is not running. Launching..."
   def params = [
      new StringParameterValue('VERSION', version)
   ]
   nextJob.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
}

它就像一个魅力。

于 2014-07-23T15:07:46.937 回答
5

如果您转到您的工作页面,并将“api”添加到 URL 的末尾,您将获得有关使用 API 的信息。

http://yourjenkins/job/job_name/api

有关使用 Jenkins API 的更多信息:

https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API
于 2011-09-02T16:14:56.537 回答
2

如果您对深入研究 Jenkins Java API 感到满意,您可以编写一个系统 Groovy 脚本来获取这些数据。Job 类是开始的地方 。

于 2011-09-02T18:08:15.113 回答
0

也可以查看颜色属性。我知道这不是想要的方式。但也许有人可以利用它。通过“/job/api/xml”获取概览 xml,然后检查“anim”的颜色属性。

于 2021-10-26T14:41:26.823 回答
0

/api您的构建页面(“访问渐进式控制台输出”一章)所述,您可以通过调用 GET 请求轮询控制台输出<url-to-job>/lastBuild/logText/progressiveText。引用 API 文档:

如果响应还包含X-More-Data: true header,则服务器指示构建正在进行中

你去吧。您可以通过简单地在浏览器中调用相应的 URL,然后使用浏览器的开发人员工具(通常通过按 F12 访问)检查响应标头来测试此行为。在 Firefox 中,相应的选项卡称为“网络分析”(假设我的翻译是正确的,我的浏览器没有设置为英文)。在 Chrome 中,导航到“网络”标签。

此答案基于 Jenkins 版本 2.176.3。

于 2020-03-19T16:21:26.473 回答