6

ツール
ジェンキンス版。1.470
Maven 2
サブバージョン

環境

私のビルドに多数のプロジェクト AD があるとします。依存関係グラフは次のように存在します。つまり、B は A のクラスに依存し、C は B のクラスに依存し、D は A のクラスに依存します。ビルド後のアクションとして依存するビルドを呼び出すようにジェンキンス ビルドを作成します。

A
|--> B --> C
|--> D

毎晩、Jenkins で完全なビルドをトリガーします (A ビルド、B のトリガー (C のトリガー)、D のトリガー)。これは、A に毎晩ビルドするように指示するだけで簡単に実行でき、残りはカスケードします。

問題

ただし、コミットでは、一度コミットされたプロジェクトをビルドしたいと考えています。

  • 状況 1 : リポジトリをポーリングし (またはコミット フックを使用しても違いはありません)、B へのコミットがあったことを確認すると、B がビルドされ、C がビルドされます。 成功!

  • 状況 2 : リポジトリをポーリングし、B と C が 1 つのコミットでコミットされていることを確認すると、Jenkins は B のビルド (C のビルドのトリガー) と C のビルド (2 番目のビルド) を試みます。失敗。どうなるか見てみ?C は 2 回ビルドされ、貴重なビルド時間が費やされました。 ビルドを高速に保ちます。

コミットされた各ビルド パイプラインで最上位のプロジェクトのみをトリガーする方法を知っている人はいますか?

1つの解決策は、各パイプラインで最高のプロジェクトを決定する複雑なSVNフックになると思います...

  • 状況 3 : 1 回のコミットで BC と D にコミットします。SVN フックは、C が B に依存していることを検出します。フックは、プロジェクト固有のリンクを呼び出して、B と D のビルドを開始します。

落とし穴: 非常に複雑な SVN コミット フック。SVN フックでパイプラインを維持する必要があります。

これは他の人が遭遇した問題だと思います。これに役立つ Jenkins プラグインはありますか?

4

2 に答える 2

1

c が依存しているビルドが終了するまで、ビルドを待機するように jenkins に指示することをお勧めします。これは、それを行うためのジョブ構成内のフラグです。ただし、これはジョブごとに行う必要があります。ところで...依存ジョブが完了するまでジェンキンスがビルドを待機する必要がある別のフラグもあります。

于 2012-07-27T12:12:52.117 に答える
0

また、この問題の効率的な解決策を探しています。いくつかの提案を見てきましたが、これまでのところ、Locks&Latches プラグインを使用してビルドをシリアル化することで、落とし穴の 1 つだけを回避できました。1 回のチェックインでプロジェクトが複数回ビルドされるのを防ぐことはできませんが、上流のプロジェクトが完了した後、プロジェクトが順番に再ビルドされるようにします。

一般的なケースで解決するのは実際には複雑な問題ですが、これに対処するためのプラグインを作成することを考えていました。簡単な解決策の 1 つは、上流のプロジェクトが現在ビルド中であるかどうかを確認し、ビルド キューから削除することです。アップストリーム ジョブはビルドが完了するとビルドを開始するため、これは 1 つのオプションです。

より良いオプションは、依存関係グラフに基づいてビルド キューを自動的に管理するプラグインです。すべての依存関係が完了するまでビルドが開始されないようにする必要があるため、これは複雑になる可能性があります。基本的にこれは、すべてのチェックインにより、プラグインがすべてのダウンストリーム ビルドをキューに自動的に追加して、それらを管理できるようにすることを意味します。既存のアップストリーム/ダウンストリーム トリガーを使用してこれを実現するための巧妙で簡単な方法がある可能性がありますが、それを実現する方法はまだ明確ではありません。この状況を処理すると主張するビルド パイプライン プラグインは既に存在しますが、上流のビルドと同じチェックインによって下流のビルドがトリガーされる可能性があるという競合状態を防ぐために何もしていないことは明らかです。

于 2012-11-28T23:32:39.873 に答える