2016-09-16 4 views
1

他の3つのジョブ(B1、B2、B3)をトリガーするジェンキンジョブ(A)が1つあります。 これらの3つのジョブはすべて同じジョブ(C)を起動します。 ジョブAをトリガすると、ジョブCが2回実行されます(3回期待されます)。ジェンキンスダイヤモンドの依存関係が3回のアップストリームジョブで2回だけ発生する

質問:Cが3回ではなく2回トリガーされる理由を説明してもらえますか?

依存関係の概要:

-> B1 -> 
A -> B2 -> C 
    -> B3 -> 

下流ビルドビューは、ジョブの2はC.のトリガーだけつの実行(たとえば、B2、B3のために)これらは必ずしも同じではないことに注意してくださいすることを示しています2ジョブ。

実行の概要(Aの下流には、ビルドビュー)ジョブのconfigsについて

-> B1 -> C (build number 1) 
A -> B2 -> C (build number 2) 
    -> B3 -> C (build number 2) <<< same as for B2 

詳細:B1、B2、B3:

ジョブAは、ビルド後のアクションを持っている/他のプロジェクトをビルドします

ジョブCは、他のプロジェクトを見て/プロジェクトを構築されていた後のビルド/トリガを構築していますB1、B2、B3

Jenkinsバージョン:1.583

答えて

1

これはJenkinsがどのようにジョブをトリガーするかの方法です。同時はCで許可されていないビルド場合は、次のようになり(私はそうでないと仮定):

  1. A仕上げをし、B1、B2、B3をトリガー
  2. B1(例えば、B2またはB3可能性がありビルド#1(C#1)を終了しトリガーします。
  3. B2終了とトリガC. C#1がまだ動作しているので、ビルドはスタックされています。
  4. B3の終了とトリガC. C#1ビルドが実行されている限り、他のビルドがスタックされ、同じ方法でトリガされた場合(つまり、Cがパラメータ化されたビルドでもパラメータも同じでない場合)、スタックされたビルドはマージされます1つにしたがって、C(C#2)の1つのビルドだけが積み重ねられます。
  5. C#1が終了し、キュー(C#2)の次のビルドが開始されます。 C#2がマージされると(トリガーB2、B3から)、ビルドキューは空になりました。
  6. C終了C#2。

ご覧のとおり、Cは2回しか実行されませんでした。

回避策があります。 Cをパラメータ化し、異なる値(トリガのジョブ名など)を指定します。または、Cの同時ビルドを許可しますが、同じ共有リソースにアクセスしないようにする必要があります(クリティカルセクション除外など)。

関連する問題