0

(ここや他の場所で NodeLabel プラグインを使用して同様の問題を解決する提案を見てきましたが、この目的で NodeLabel を実際に使用する方法の確かな例をまだ見つけていません。 )

現在、gerrit トリガーは、私のプロジェクトの 1 つの git リポジトリにある特定のブランチに基づいてビルドを開始します。

これにより、Parameterized Trigger プラグインを使用して、2 つの異なる OS (X1 と Y1) を持つ 2 つのスレーブ上でさらに 2 つのプロジェクト ビルド (2 つのラベルで識別) を生成する 1 つの親ジョブ P が作成されます。

明日、私は Y2 と呼ばれる Y1 の新しいバージョンをビルドします。X1 は非推奨です。コードの git リポジトリ内で、このバージョンのコードの有効なターゲットを特定できます。

その時点で、親 (P) と 3 つのノード タイプ (X1、Y1 Y2) を処理する必要があります。分岐のため、レガシ コード (X1 と Y1 用) または新しいコード (Y2 のみ) の両方をビルドする機能もサポートする必要があります。

さらに別のジョブ Y2 を作成することもできます (これは、ビルドを静的ラベルの使用に制限するノード タイプを除いて Y1 と同じです)。その後、各子ジョブの実行中に、ジョブを早期に中止するかどうかを決定できます (非推奨のターゲット)。 ) またはそのビルドを実行します。ただし、ビルドするたびに、冗長な負荷とトラフィックを git サーバーに追加する 4 つの git クローンを取得します。1 つは親用、もう 1 つは各ターゲット用です。これには、最初の「シェルの実行」ステップで廃止されたと判断できた 2 つが含まれます。 !

これは大したことではないように聞こえるかもしれませんが、OS Y9 になると、特定のブランチに対して最大 10 個のジョブが実行される可能性があり、そのうちの 8 個は不要です... これは耐えられません。最終的に古い OS ターゲットは排除されますが、特定のビルドに必要なバージョンが 1 つだけであっても、常に複数のバージョンを利用できる必要があります。

今日、任意のターゲットに対する Jenkins でのビルドの最初のビルド ステップでは、「シェルの実行」を使用して、子ジョブに渡す有用な情報を収集します。

ただし、子ジョブは、「Trigger/call builds on other projects --> Projects to build」フィールドにハードコーディングされています (ブロックする方法やタイミングなどの他の重要な設定と共に!)そこに (またはプログラムで設定した変数を何らかの形で参照する)、その前のシェルステップでその変数を設定するだけで、必要なサブプロジェクトが正確に入力されます! サブプロジェクトは、実行が許可されているノード/ノードのグループを「認識」しています。

要するに、私のプロジェクトはスクリプトを実行し、そのスクリプトは変数を設定し、その変数は、このビルドの構成を編集したかのように、呼び出すサブプロジェクトを定義します (たとえば、MY_PROJ_TO_BUILD="X1 Y1" は「ビルドするプロジェクト」に入力します)。 " 分野)。次のステップでは、これらのサブプロジェクトを通常の方法で構築します。これだけで、現在の機能を失うことなく、Jenkins を直接ハッキングすることなく実行できます。(これらは gerrit からトリガーされるため、複数のバージョンの gerrit や Jenkins を実行することも実行可能なオプションではありません。)

NodeLabel については言及されていますが、この種の問題に対して効果的に使用する方法の例をまだ見ていません (私が見た例は非常にあいまいです)。したがって、法案に適合する例またはその例へのポインタがあれば、私はそれを見てうれしいです. 同様に、別のアイデア/解決策があれば、喜んでお聞きします。私が望んでいたこと(「ビルドするプロジェクト」フィールドの変数サブ)が機能しない、またはおそらくできない理由をいくつか想像できますが、特定のターゲットに必要なターゲットの小さなサブセットを決定するためだけに、多くの不要なクローンを作成して実行することは確かですブランチのビルドも最適ではありません。

(注:これは1つのプロジェクト/レポ用です...実際に扱っているのは数十あり、それぞれに対していくつかの同一のノードタイプの実行サブプロジェクトを作成する必要があります1つはそれ自体が茶番劇です...しかし、特定のブランチビルドに対して複数のターゲットをビルドする必要がある場合に、ビルドの後方互換性を保証する唯一の方法を私がこれまでに見つけました.)

4

1 に答える 1