10

Python 2.7 と Jenkins を使用しています。

Jenkinsジョブが完了するまでチェックインと待機/ポーリングを実行するPythonでいくつかのコードを書いています。どうやってそれを達成するかについて考えてみたいと思います。

  1. Perforce でチェックインを作成する Python 関数 -> P4 には CLI があるため、これは簡単に実行できます。
  2. ビルドがいつトリガーされたかを検出する Python コード -> 変更リストとジョブ番号があります。ビルド ログの Jenkins API をポーリングして、適切な変更リストがあるかどうかを確認するにはどうすればよいですか? このステップの出力は、ジョブを実行しているビルド URL です。
  3. Jenkins ジョブが完了するまで待つにはどうすればよいですか?

Jenkins Rest API または Python Jenkins モジュールのスニペットを使用できますか?

4

8 に答える 8

7

ジョブが終了したかどうかを知る必要がある場合、buildNumber と buildTimestamp では十分ではありません。

これは、ジョブが完了したかどうかを確認する方法の要点です。私はそれをルビーで持っていますが、python ではないので、誰かがこれを実際のコードに更新する可能性があります。

lastBuild = get jenkins/job/myJob/lastBuild/buildNumber
get jenkins/job/myJob/lastBuild/build?token=gogogo

currentBuild = get jenkins/job/myJob/lastBuild/buildNumber
while currentBuild  == lastBuild 
  sleep 1 

thisBuild = get jenkins/job/myJob/lastBuild/buildNumber
buildInfo = get jenkins/job/myJob/[thisBuild]/api/xml?depth=0

while buildInfo["freeStyleBuild/building"] == true
  buildInfo = get jenkins/job/myJob/[thisBuild]/api/xml?depth=0
  sleep 1

すなわち。A) ビルドが開始されるまで待ち (新しいビルド番号)、B) ビルドが終了するまで待ちます (ビルドは false)。

于 2013-08-27T00:12:29.390 に答える
4

最後のビルドのタイムスタンプを照会して、ビルドが終了したかどうかを判断できます。ビルドをトリガーする直前の状態と比較し、いつ変化するかを確認します。/lastBuild/buildTimestampタイムスタンプを取得するには、求人 URLに追加します

実際のところ、Jenkins で/lastBuild/api/任意の Job に追加すると、多くの API 情報が表示されます。Python API もありますが、私はそれに慣れていないので、これ以上お手伝いできません

ただし、XML を使用していた場合はlastBuild/api/xml?depth=0、XML 内に追加して<changeSet>、ビルドをトリガーしたリビジョン/コミット メッセージのリストを含むオブジェクトを表示できます。

于 2013-03-11T13:59:57.573 に答える
0

同じ問題を経験していましたが、これは私にとってはうまくいきましpython3python-jenkins

while "".join([d['color'] for d in j.get_jobs() if d['name'] == "job_name"]) == 'blue_anime':
        print('Job is Running')
        time.sleep(1)

print('Job Over!!')

作業中の Github スクリプト:リンク

于 2015-07-27T11:46:48.303 に答える