私は必要な方向に私を導くのを助けたので、私はKdawgの答えを選びました。ありがとうございました!
私が実装したソリューションがKdawgの答えと異なるため、私自身の答えも含んでいます。私はそれが他の人に価値をもたらすと感じています。
まず、私はジェンキンスを初めて知りました。だから私がミスピークしたら、私を修正してください。第二に、Jenkinsの「キューアイテム」とJenkinsの「ビルドジョブ」には違いがあるという点で、若干の学習曲線がありました。 「キューアイテム」が作成された瞬間には、ビルドジョブが開始されていないため、「ビルドジョブ」IDはありません。また、ビルドジョブが開始されると、キューアイテムは削除される5分前になります。
私はこれらのタスクを実行します。
curl -X POST "http://jenkins_srv:8080/job/MY_JOB/buildwithParameters?this=1&that=2" --user name:pass
curl -X POST "http://jenkins_srv:8080/job/MY_JOB/buildwithParameters?this=1&that=2" --user name:pass
curl -X POST "http://jenkins_srv:8080/job/MY_JOB/buildwithParameters?this=1&that=2" --user name:pass
ジェンキンスがキューで実行する3つの構築ジョブをスケジュールします。これらは「キュー項目」になります。これらの「キュー項目」には「キューID」があります。私の元の質問で与えられた例では、これらの3つのカールコマンドが "キューID"を持つキュー項目 "121
"、122
、& 123
を作成するとします。
なぜこれが重要ですか?
Jenkinsサーバーの負荷によっては、キューに入れられたアイテムがすぐに実行される場合と実行されない場合があります。それがすぐに実行されるなら、Kdawgの答えは間違いなく正しいです。彼のコマンドを実行:
curl -X GET http://jenkins_srv:8080/queue/item/121/api/json?pretty=true --user name:pass
curl -X GET http://jenkins_srv:8080/queue/item/122/api/json?pretty=true --user name:pass
curl -X GET http://jenkins_srv:8080/queue/item/123/api/json?pretty=true --user name:pass
これは、それぞれの「キューアイテム」についてのキュー情報を取得し、ビルドジョブが開始された場合を返すものの中に、「仕事を構築し、」IDを取得する方法は、確かにそこにあります。ビルドジョブがまだ開始していない場合、この情報は空白になります。
ここには、私が感じている、付加価値のある部分があります。
ビルドジョブが開始されると、Kdawgの回答の情報は、3つのcurl -X GET
コマンドに対する応答に取り込まれます。また、デフォルトでは、Jenkinsは5分ごとに「キューアイテム」を掃除(ガベージコレクション、自分の言葉を選択)するように設計されています。つまり、すべてが「キュー項目」IDで5分のデータ保持期間が経過している場合は、「キュー項目」IDから「ビルドジョブ」IDを取得するための別のメカニズムが必要です。
私の場合は、ジェンキンスをフロントエンドとして使用しています。また、バックエンドでは、サーバー構成とアプリケーションのデプロイメントを実行するためにAnsibleを使用しています。これらのアプリケーション展開の中には、「キュー項目」の5分間のデータ保持期間をはるかに超える30分以上かかるものがあります。
私が解決しなければならなかった問題は、私が持っているすべてが「キュー項目」IDであれば、後で何時間後に、何時にチェックするかにかかわらず、「ビルドジョブ」IDを見つける方法?
ここに私の解決策がありました(XML出力が必要ですが、FYIを参照)。
私は、このコマンドを実行した:
curl -X POST "http://jenkins_srv:8080/job/MY_JOB/buildwithParameters?this=1&that=2" --user name:pass
このコマンドは、この情報を返します:
Runtime responseHeaders Date: Day, ## Non Year xx:yy:zz GMT
X-Content-Type-Options: nosniff
Location: http://jenkins_srv:port/queue/item/123/
Content-Length: 0
Server: Jetty(9.4.z-SNAPSHOT)
をここから、私はLocation
フィールドから123
を解析することができます。
その後、10秒間寝た。睡眠の後、私は10秒のループ上で次のコマンドを実行します。
curl -X GET http://jenkins_srv:8080/queue/item/123/api/xml
私はどちらかまでということでした:
- 私はのXPath //実行ファイル/番号を含むキュー項目リターンを得ましたまたは
- 私はHTML 404ステータスコードを10分以上受け取っています。これは、ジョブがまだキューに登録されていないか、または5分間のデータ保持ウィンドウに合格したことを意味します。
このようにループすると、キュー要求を処理するのが遅い負担のJenkinsサーバーが処理されます。おそらく私が10分を過ぎると、私のアプローチでは、私の自動化アプローチがうまくqueue'dしてジョブを実行するというユースケースを扱いますが、データ保持ウィンドウ外のJenkinsをチェックしています。この場合、私は、このコマンドを実行します:
curl -X GET http://jenkins_srv:port/job/MY_JOB/api/xml?tree=builds[id,number,result,queueId]&xpath=//build[queueId=123]
これは、任意の以下に示すように、また、123
のqueueId
が含まれている「ジョブの構築」のためのXML情報を返します。このように
<?xml version="1.0"?>
<build _class="hudson.model.FreeStyleBuild">
<id>456</id>
<number>456</number>
<queueId>123</queueId>
<result>SUCCESS</result>
</build>
を私は正式に "ビルドジョブ" IDを取得することができましたが、開始時とチェックアウト時の時間差に関係なく、 "キューアイテム" IDのみを持っていました。
変数にexecutable.urlの値を設定するにはどうすればよいですか? – vijay
'http:// jenkins_srv:8080/queue/api/json?pretty = true'このURLは一時的です。ビルドが完了した後にキュー項目の詳細を取得する方法は? –