16

さまざまなアプリで git monorepo を使用しています。現在、アプリのすべてのパイプラインを含むルート フォルダーに単一の Jenkinsfile があります。commit が 1 つのアプリのみを変更した場合、すべてのアプリに対して完全なパイプラインを実行するのは非常に時間がかかります。

分岐には GitFlow のようなアプローチを使用しているため、Jenkins のマルチブランチ パイプライン ジョブはプロジェクトに最適です。

Jenkins で複数のジョブを実行する方法を探しています。それぞれのジョブは、適切なアプリケーションのコードが変更された場合にのみトリガーされます。

私にとって完璧なソリューションは次のようになります。

Jenkins には複数のマルチブランチ パイプライン ジョブがあります。それぞれが、指定されたディレクトリとサブディレクトリへの変更のみを探します。それぞれが独自の Jenkinsfile を使用します。ジョブは X 分ごとに git をプルし、既存のブランチの適切なディレクトリに変更がある場合 - ビルドを開始します。適切なディレクトリへの変更を伴う新しいブランチがある場合 - ビルドを開始します。

この実装を妨げているもの

  1. マルチブランチ パイプラインによるスキャン実行中に無視する必要があるフォルダーへのコミットを定義する方法がありません。マルチブランチ パイプラインの「追加の動作」には、「ポーリングは特定のパスへのコミットを無視する」オプションがありませんが、パイプラインまたはフリースタイル ジョブにはあります。しかし、マルチブランチ パイプラインを使用したいです。

  2. 「project1」のみが変更された新しいブランチがある場合、「project2」のマルチブランチパイプラインがトリガーされるたびに、とにかくこの新しいブランチを検出してビルドするため、ここで説明するソリューションはうまくいきません。適切なコードに変更があったかどうかに関係なく、新しいブランチごとに、Multibranch パイプラインのそれぞれが少なくとも 1 回実行されることを意味します。

同じgitリポジトリを監視しているが、適切なコードが変更されたときにのみトリガーされるいくつかのマルチブランチパイプラインを実装する方法について、助けや提案を感謝します

4

3 に答える 3

9

これは、Multibranch ビルド戦略拡張プラグインを使用して実現できます。このプラグインを使用すると、変更がサブディレクトリに属する​​場合にのみビルドが開始されるルールを定義できます。

  1. プラグインをインストールする
  2. マルチブランチ パイプライン構成で、ビルド戦略を追加します。
  3. Build included regions 戦略を選択します
  4. 次のようなサブフォルダーをフィールドに配置しますsubfolder/**

構成のサンプル画像はこちら

この方法でも変更は検出されますが、特定のファイルまたはフォルダーのセットに属していない場合、ビルドは開始されません。

これは、私がこれまでに知っている最良のアプローチです。しかし、変更が発見されない場合が最善の方法だと思います。

編集: Gerrit Code Review プラグイン構成

Gerrit Code Review プラグインを使用している場合は、カスタム クエリを使用して新しい変更が検出されないようにすることもできます。

Gerrit コード レビューの構成例

于 2020-01-27T11:43:03.530 に答える