web-dev-qa-db-ja.com

2つのJenkinsプロジェクト/ビルドが同時に実行されないようにするにはどうすればよいですか?

データベースを共有する2つのJenkinsプロジェクトがあります。同時に実行してはなりません。厳密に言えば、非並行性を超える特定の依存関係はありませんが、現時点では、一方の「ダウンストリーム」を実行することにより、この制約を部分的に管理しています。これはほとんどの場合機能しますが、常に機能するとは限りません。 2番目の実行中にソース管理の変更が発生した場合、1番目は再び起動し、それらは同時に実行されるため、おそらく両方とも惨めに失敗します。

これは似ていますが、同一ではありません 特定のJenkinsジョブが同時に実行されないようにする方法 違いは、「スレッド数」の問題がないことです-すでに実行しているだけです2つの(異なるプロジェクト)ビルドが互いにストンプする場合でも、任意のプロジェクトで一度に最大で1つのスレッド。これはそのスレッドのいくつかの提案をすべて除外しているようです。

31
jackr

Locks and Latchesプラグイン で問題が解決するはずです。ロックを作成し、両方のジョブが同じロックを使用するようにします。これにより、ジョブが同時に実行されなくなります。

  1. 「Jenkinsの管理:プラグインの管理」でプラグインをインストールします。
  2. 「Jenkinsの管理:システムの構成」でロックを定義(名前を指定)します。
  3. 除外に参加する各ジョブについて、
    1. 「:構成:ビルド環境」で、「ロック」をチェックし、
    2. ドロップリストからロック名を選択します。
23
Jason Swager

ロック可能なリソースプラグイン 。シンプルで、2016年5月にうまく機能しています。

プラグインをインストールします。 [Jenkinsの管理]> [システムの構成]で、[ロック可能なリソースマネージャー]に移動します。
[ロック可能なリソースの追加]を選択します。フィールドの値を入力します:名前と保存をクリックします。警告:[名前]フィールドにスペースを入力しないでください。

Jenkins>job_name> Configure> General、Selectチェックボックス:このビルドにはロック可能なリソースが必要です。フィールドの値に名前を入力します:リソース。

ビルドを開始します。ビルド#numberで、ロックされたリソースを選択します。このビルドは次のリソースをロックしています:resource_name-resource_description

同じリソースを使用する別のビルドを開始します。ジョブ名を示すJenkinsステータス/メニューにビルドキューが表示されます。ホバーテキストは、開始済みby、リソースを待機中resources_list、待機中time

(リソースタグ/ラベルも使用できます)

「このビルドにはロック可能なリソースが必要です」が表示されない一部のユーザーに問題があるように見えるため、ジョブ設定ページのスクリーンショットを追加:**チェックボックスが選択されていない場合、「[_]このビルドにはロック可能なリソースが必要です」のみが表示されます enter image description here

7
gaoithe

編集:以下の情報は2014年4月10日付けで有効です

除外プラグイン https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin 少数のビルドが同じリソースを使用する場合に非常に便利です。テストデータベース。必要なのは、このリソースを使用してすべてのジョブの構成を更新することだけです。その結果、ジョブが並列に実行されることはなく、他のジョブが完了するのを待ちます。

以下から取得: http://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery

このプラグインは、2つ以上のジョブの並列実行をブロックします。
テストするには、これをjob1に対して実行します

  1. 構成、設定
  2. [ビルド環境]で[リソースを追加して除外を管理する]をオンにします。
  3. 次に、追加->新しいリソース->名前->ロック
  4. ビルド->ビルドステップを追加
  5. クリティカルブロックの開始
  6. ビルドステップを追加->追加したいものをすべて追加します(sleep 15を追加して、並行性をチェックするために長く続くようにします)。
  7. ビルドステップの追加->クリティカルブロックの終了
  8. 上記の手順をjob2に対して繰り返します。必ず、同じロック名「lock」を使用してください。
  9. 手動で両方のジョブを同時にビルドします。
  10. Jenkins->除外管理で実行の進行状況を監視します。
4
2.8a8a_G