2011-09-13 9 views
29

Jenkinsには、Webサイトのフロントエンドを通じてデータベースを変更するためにSeleniumを使用する仕事がいくつかあります。これらのジョブの一部が同時に実行されると、読み込みが不正でエラーが発生する可能性があります。 Jenkinsの特定のジョブを強制的に実行できないようにする方法はありますか?データベースをロックする必要はありません。このロックは、テストしている任意の数のユーザーによって読み取られたり変更されたりする可能性があります。ジェンキンスの仕事を排他的にする方法はありますか?

答えて

21

あなたがグローバルおよびノー​​ドごとのセマフォ定義することができますThrottle Concurrent Buildsプラグインをしたいです。

ロックとラッチは、スロットル同時の賛成でdeprecatedビルドされています。

+0

私はこの新しいプラグイン、おかげで私のジェンキンスを更新します、ロック&ラッチプラグインの廃止予定の警告に気づいていませんでした。 –

4

プラグインをlocks & latchesプラグインとport allocatorプラグインの両方で試してみました。どちらもどちらも信頼できるものではありませんでした。ロック&ラッチは時々働いていましたが、時折ハングアップすることがありました。ポートアロケータをハックとして使用するのは、複数のジェンキンノードを持たない限り動作しますが、設定オーバーヘッドは多少高いです。私は最終的に上に定住してきたことは、他のハックですが、それは確実に動作し、コア・ジェンキンスのもの(なしプラグイン)を使用しています。

  • お持ちの場合は、マスターと同じボックスで実行されているスレーブノードを作成する(またはしません箱のたくさん)
  • は、このスレーブはシングルエグゼキュータ(キー)
  • 2(またはNを結ぶ)のみ縛られたジョブ」に、この新しいスレーブノード、必要に応じてスレーブの使用状況を設定し
  • に一緒に実行してはならない仕事を与えます他の仕事が新しいスレーブで実行されると、それはあなたの仕事を台無しにするでしょうか。

スレーブにはエグゼキュータが1つしかないため、スレーブに関連付けられたジョブは決して実行できません。

+2

驚くばかり!私のような初心者のためのちょうど1つのメモ:ジョブを結びつけるために、 "このプロジェクトが実行できる場所を制限する"オプションをジョブ設定で使用してください。 – Linulin

関連する問題