3

Jenkinsシナリオの詳細:
======================
-Jenkinsのビルドエグゼキューター(マスター/スレーブのいずれか)の数:3-
アップストリームジョブ:USJobとこのジョブ任意のビルドエグゼキュータで実行できます
-ダウンストリームジョブ:DSJobとこのジョブのクワイエット期間は120秒で、特定のビルドエグゼキュータでのみ実行するように関連付けられています


  • USJobはビルドステップでこれを持っています:echo "Happy BirthdayJames" そしてこのジョブを完了するのに5秒かかります
  • DSJobはビルドステップでこれを持っています:echo "James bond isdead" そしてこのジョブを完了するのに5秒かかります

ここで、USJob(親/アップストリームジョブ)を5回実行するとします。これにより、 DSJob (子/ダウンストリームジョブ)も5回呼び出されます。次に、必要なのは次のとおりです。

  1. JenkinsはUSJobを5回実行する必要があるため、各呼び出し中にDSJob子ジョブを呼び出します。
  2. DSJobを実行する代わりに(USJobから呼び出されるとすぐに)、DSJobは「120秒間」アイドル状態またはキューに入れられます(つまり、休止期間に設定されます)。

  3. このシナリオを見ると、UPJobはDSJobを5回呼び出し、DSJobはそのかなりの期間が満たされるまでキューにとどまります。したがって、クワイエット期間が終了すると、JenkinsはDSJobを開始します。

私の質問: 私が見ようとしているのは、DSJob(子ジョブ)でどのような設定/オプションを設定できるかです。これにより、DSJobは1回だけ実行され、何度呼び出されてもかまいません。 言い換えれば、ジェームズ・ボンド/誰かが一度死んだら彼は再び死ぬことはできません!……わかっ!しかし、誰かが彼のBDayにハッピーバースデーN回を望むことができます。

-この概念は、TFS(Team Foundation Server-ビルド定義のTRIGGERセクション内)で継続的インテグレーション(CI)ビルドを累積的に実行することに似ています。つまり、ソース管理に変更があったらすぐにビルドを実行しますが、すべての変更を累積します。実行中のCIビルドが進行中になるまでソース管理を行い、それが完了すると、次のCIビルドは開発者によって行われた他のすべてのソース管理の変更を選択します。

4

3 に答える 3

2

これは 1 つのオプションであり、最終的にはこの方法で行っていたので同意します。エルダッドを共有してくれてありがとう。基本的に、ワークスペースにファイルを配置して使用したくないのは、任意のマシンの使用可能なスレーブでジョブを実行し、すべてのマシン/スレーブがアクセスできる中央の NAS でファイルを作成したくないからです。また、Xステータスで終了したかどうかにかかわらず、子/下流のジョブが親/上流のジョブを探して実行したくありませんでした。

私が行った方法は、DSJobで120秒に設定されたQuiet期間を使用することです+ USJobまたはDSJobの他の親から「DSJob」を呼び出します(パラメーターを直接/プロパティファイルを介して渡す/または渡さないことを選択できます)+それが見つかりましたうまくいきました。複数の USJob をスケジュールしたとき、最初に発生した USJob が DSJob と呼ばれ、120 秒 (または X 秒) 待機し、USJob の最初のジョブが完了すると、2 番目の USJob が開始されて終了し、再び DSJob が呼び出されましたが、これは行われませんでした。新しい DSJob をキューに入れてはいけませんが、残りの X no. ジョブ DSJob が X から実行されるまでの秒数は、これまでに費やされた時間に関係なく、再び X 秒に戻りました。これは良好でした。「Build Blocker プラグイン」も使用しましたが、DSJob に設定された「静かな期間」の概念を使用したいように機能しているため、論理的にポイントを明確にするために使用しました。

于 2013-02-28T16:48:06.590 に答える