4

他の一連のジョブの完了に応じて 1 つのジョブしか持たない単純なケースは簡単です。マルチジョブを使用するか、ビルド フロー プラグインを使用しparallel { ... }ます。私が解決しようとしているケースは、より一般的なものです。たとえば、次のようになります。

JobA depends on JobX and JobZ
JobB depends on JobY and JobZ
SuperJob depends on JobA and JobB

これらの各ジョブは、前提条件が完了したときにのみトリガーされるようにしたいと考えています。

ビルド フロー プラグインも、結合プラグインも、ジョブ DSL プラグインも、これに適したメカニズムを持っていないようです。もちろん、すべてのジョブを開始して Jenkins をポーリングさせることもできますが、それは非常に見苦しいものです。

もう 1 つの行き止まりは、「アップストリーム ジョブ トリガー」です。アップストリーム ジョブの実行だけでなく、ジョブの特定のビルドをトリガーしたいと考えています。

アップデート

1 つの回答では、マルチジョブ プラグインについて言及しています。実際にこの問題を解決するために使用できますが、スケジューリングと合計ビルド時間はほとんどの場合最悪のケースです。たとえば、次の依存関係グラフがあり、ビルド時間が次のようになっているとします。

left1 (1m)  right1 (55m)
   |            |
left2 (50m) right2 (2m)
   |____________|
         |
        zip

マルチジョブ プラグインを使用すると、以下が得られます。

Phase 1:
   left1, right1  // done in 55m
Phase 2:
   left2, right2  // done in 50m
Phase 3:
    zip   // total time 105m

すべての前提条件が完了したときに次のジョブをトリガーする方法があれば、合計ビルド時間はわずか 57 分になります。

ここでの答えは、できれば独自のポーリングメカニズムを作成せずに、その動作を取得する方法を説明する必要があります。

update 1 1/2 以下のコメントでは、左側のタスクと右側のタスクを 1 つのサブタスクにグループ化することが提案されました。はい、これはこの例では実行できますが、これを一般的に自動的に実行するのは非常に困難です。たとえば、追加の依存関係があるとします。right2 は left1 に依存します。与えられたビルド時間では、right2 が起動される前に left1 が完了しているため、最適なビルド時間は変わらないはずですが、この知識がなければ、right1 がないリスクを冒さずに、left1 と left2 を同じグループにまとめることができなくなります。利用可能。

更新 2

ここには既成の答えがないようです。システムのグルーヴィーなスクリプトを自分でコーディングする必要があるようです。質問に対する私自身の回答を参照してください。

更新 3

最終的にマルチジョブ プラグインをフォークし、その中に新しいロジックを記述しました。いくつかのクリーンアップの後、新しいプラグインとして公開できることを願っています...

4

4 に答える 4

3

jenkins-workflow タグを追加したので、Jenkins ワークフロー プラグインを使用しても問題ないと思います。おそらく、このワークフロー スクリプトがニーズに合っていると思います。

node {
    parallel left: {
        build 'left1'
        build 'left2'
    }, right: {
        build 'right1'
        build 'right2'
    },
    failFast: true

    build 'zip'
}

このワークフローはzip、両方の並列分岐が終了するとすぐにトリガーされます。

于 2015-09-25T08:57:53.977 に答える
0

ジョブのビルドが成功したときに 2 番目の親ジョブをトリガーする親ジョブの 1 つの構成でBuild other projectsasを使用できます。Post Build Actions2 番目の親ジョブも完了したら、同じ方法で子ジョブをトリガーします。

于 2015-09-21T21:45:11.603 に答える