web-dev-qa-db-ja.com

Hudson / Jenkins APIを使用して、特定のジョブが現在実行されているかどうかを確認します

特定のジョブが現在実行されているかどうかを判断するためのAPIはありますか?

理想的には、推定完了率を判断し、SVNリビジョン番号の詳細を取得して、コメントもコミットできるようにしたいと思います。

編集:

私は答えを見つけました。 http://Host/job/project/lastBuild/api/私が必要とするもののほとんどすべてがどこかにあります!手動ビルドを開始した場合、SCMチェンジセットは通知されませんが、それは理にかなっています。それでも最新のSCMリビジョンが表示されるので、それは良いことです。全体として、今の私の目的には十分です。

19
dty

Gareth_bowlesとSagarが言ったように、JenkinsAPIを使用することが知る方法です。深さを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>
...
19
zageyiff

求人のページに移動し、URLの末尾に「api」を追加すると、APIの使用に関する情報が表示されます。

http://yourjenkins/job/job_name/api

Jenkins APIの使用に関する詳細情報:

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

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))
}

それは魅力のように機能します。

3

Jenkins Java APIを掘り下げることに慣れている場合は、このデータを取得するためのシステムGroovyスクリプトを作成できます。 ジョブクラス から始めます。

2
gareth_bowles

ビルドの/apiページ(「プログレッシブコンソール出力へのアクセス」の章)に記載されているように、<url-to-job>/lastBuild/logText/progressiveTextを呼び出すことにより、GETリクエストを使用してコンソール出力をポーリングできます。 APIドキュメントを引用するには:

応答にX-More-Data: true headerも含まれている場合、サーバーはビルドが進行中であることを示しています

そして、あなたは行き​​ます。この動作をテストするには、ブラウザーでそれぞれのURLを呼び出してから、ブラウザーの開発ツール(通常はF12キーを押してアクセスします)で応答ヘッダーを調べます。 Firefoxでは、それぞれのタブは「ネットワーク分析」と呼ばれます(私の翻訳が正しいと仮定すると、私のブラウザは英語に設定されていません)。 Chromeで、[ネットワーク]タブに移動します。

この回答は、Jenkinsバージョン2.176.3に基づいています。

0
PixelMaster