web-dev-qa-db-ja.com

Jenkins / Hudson-1レベル以上の深さで複数のジョブを並行して実行する方法は?

次のワークフローをJenkinsで並行して実行しようとしています。したがって、たとえば、AとBの両方が同時に実行されます。 Aが終了するとすぐに、A2とA3を同時に実行します。

かなり一般的なユースケースのようですが、私が試したほとんどのプラグインは、1レベルを超える深さをサポートしていません。これは、以下のAブランチの場合です。参加プラグインはここでは役に立たないようです。

プロモーションプラグインの使用について読んでください しかし、これを機能させるためにアーカイブするフィンガープリント/アーティファクトについて少し不思議に思っています。

この単純なビルドパイプラインを機能させる方法についての手がかりはありますか?

flow

10
vdsf

jgritty が指摘したように、 ビルドフロープラグイン を使用できます。必要な種類の並列実行を取得するには、次のビルドフロースクリプトと同等のスクリプトを実行できます。

buildTrigger = build("Trigger")

parallel(
    {
        buildA = build("A")
        buildA1 = build("A1")
        parallel(
            {
                buildA2 = build("A2")
            },
            {
                buildA3 = build("A3")
            },
        )
    },
    {
        buildB = build("B")
        buildB1 = build("B1")
    },
)

buildResults = build("GatherResult")

このスクリプトでは、最初のparallelブロックがAブランチとBブランチを処理します。ブランチに入ると、parallelブロックを追加するまで、各ビルドは順次実行されます。

4
Petrik

うまく機能する解決策があります: マルチジョブプラグイン 。それはまさにあなたが望むことをします。 MultiJob Plugin を使用すると、ジョブを連続して実行されるフェーズに分割できます。各フェーズ内で、ジョブは並行して実行されます。

簡単にするために、AとBは並行して実行したい「コンパイルジョブ」であると仮定します。さらに、A-Test(およびその子)とB-Testがあり、これらも別々のジョブである可能性があると想定します。

マルチジョブは次のように作成します。新しいアイテム->マルチジョブプロジェクト

プロジェクトでは、2つのフェーズを作成します(ビルドステップ「MultiJobフェーズ」を追加します)。最初はCOMPILEで、フェーズジョブの「A」と「B」を追加します。

COMPILEフェーズのジョブのオプションを変更して、いずれかが失敗した場合にフェーズ全体が中止されるか(デフォルト)、ジョブの続行を許可することができます。

MultiJob Setup

次に、TEST用に別のMultiJob Phase Buildstepを追加し、それに「A-Test」と「B-Test」を追加します。 A、B、A-Test、およびB-Testはすべて個別のジョブであり、必要に応じて個別に実行することもできます。

それでおしまい。ジョブが実行されると、子ジョブへのリンクが含まれるため、サブジョブで何が起こったかを確認できます。

私も同様の問題を抱えていましたが、 Promoted Builds Plugin は、他の人がアドバイスしたBuild FlowPluginよりも優れたソリューションでした。

[いつビルドをプロモートするか]チェックボックスをオンにすると、ビルドプロモーションジョブを既存のジョブに追加できます。基準で「次のダウンストリームプロジェクトが正常にビルドされたとき」をチェックすることで、名前付きダウンストリームプロジェクトが完了したときにプロモーションが発生するように構成できます(すべてのダウンストリームプロジェクトがフィンガープリントによって関連付けられていると想定)。

プロモーションステップでは、要約結果の電子メールをトリガーしたり、さらにダウンストリームジョブをトリガーしたりできます。

この場合、プロモーションジョブをトリガープロジェクトに追加し、プロジェクトA2、A3、およびB1が正常に完了することに依存する場合があります。

1
laffoyb

this が必要なプラグインかもしれないと思います。

1
jgritty

「SteventheEasilyAmused」が提案したものと同様の設定があります。ただし、「A」パスと「B」パスを独自のマルチジョブスタックとして設定し、別のマルチジョブを「トリガー」として設定した場合を除きます。 「A」スタックと「B」スタックの両方が並行して実行される場合。このように、それらは互いに直接密接な依存関係を持っていません。一方または両方のスタックに障害が発生したかどうかに応じて、結果を集計することもできます。 「トリガー」を設定してパラメーターを収集し、両方のスタックに渡すこともできます。

0
RobertoS

ビルド後のセクションでビルドその他のプロジェクトを使用します。 A1の完了時にA2、A3を開始すると言います。 「ハドソンの管理」->「システムを適切な数に構成する」でエグゼキューターの数を増やします。

0
Vishal Pahuja