使用Hudson / Jenkins API确定当前是否正在运行给定作业

时间:2011-09-02 15:40:23

标签: hudson jenkins hudson-api

是否有API来确定某个作业当前是否正在运行?

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

编辑:

我找到了答案。 http://host/job/project/lastBuild/api/几乎所有我需要的东西都在其中!如果您启动手动构建,它将不会告诉您SCM更改集,但这是有道理的。它仍然告诉你最新的SCM修订版,所以这很好。总而言之,这对我的目的来说足够好了。

5 个答案:

答案 0 :(得分:19)

正如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>
...

答案 1 :(得分:5)

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

http://yourjenkins/job/job_name/api

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

https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

答案 2 :(得分:2)

如果您对挖掘Jenkins Java API感到满意,可以编写一个系统Groovy脚本来获取此数据。 Job class是开始的地方。

答案 3 :(得分:2)

我正在使用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))
}

它就像一个魅力。

答案 4 :(得分:0)

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

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

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

此答案基于Jenkins版本2.176.3。