Определите, выполняется ли задание в настоящее время с использованием API Hudson/Jenkins

Существует ли API для определения того, выполняется ли данное задание или нет?

В идеале, я также хотел бы, чтобы определить его оцененный% complete и получить детали номера версии SVN и комментировать комментарий тоже!

EDIT:

Я нашел ответ. http://host/job/project/lastBuild/api/ имеет почти все, что мне нужно в нем где-то! Если вы начнете сборку вручную, он не скажет вам изменения в наборах SCM, но это имеет смысл. Он все еще говорит вам последнюю версию SCM, хотя и так хорошо. В общем, достаточно хорошо для моих целей прямо сейчас.

Ответы

Ответ 1

Как говорят gareth_bowles и Sagar, использование API Jenkins - это способ узнать. Если вы поместите глубину в 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>
...

Ответ 2

Если вы перейдете на страницу своей работы и добавьте "api" в конец URL-адреса, вы получите информацию об использовании API.

http://yourjenkins/job/job_name/api

Дополнительная информация об использовании Jenkins API:

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

Ответ 3

Если вам удобно разбирать Jenkins Java API, вы можете написать систему Groovy script, чтобы получить эти данные. Класс работы - это место для запуска.

Ответ 4

Я использую плагин 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))
}

Он работает как шарм.