Jenkinsでのモノレポの特定のパイプラインビルドのトリガー


11

複数のリポジトリを単一のリポジトリに変換している最中です。複数のリポジトリ構造を単一に変換するため、CIツールとしてJenkinsを選択しています。主な問題が発生しました。

  1. すべてのビルド/テストをコミットごとに実行する必要があるため、ビルド/テスト時間は大幅に増加しました。これは、ビルドツールを使用することで部分的に軽減されます。今回のケースでは、Buckを使用しました。

  2. コミットされたコードに関連するすべてのテストが実行された後、プロジェクトごとにデプロイメントJenkinsfileがあります。再デプロイが必要なプロジェクトのJenkinsfileのみをトリガーするにはどうすればよいですか?そして私がそうすることができるならば、これは正しい習慣ですか?


ビルドフックはどのように実装されていますか?Jenkinsでリポジトリをポーリングしますか?コミットごとにgitフックが設定されていますか?
PrestonM

コミットごとにGithookが用意されています
YellowPillow

回答:


2
  1. 変更されたファイルのリストを取得し、それを使用して実行するテストを決定します。

  2. デプロイを実行するために、実行時外部Groovyスクリプトをロードします。


リンクから関連するビットをコピーし、リンクが非推奨になった場合に情報が失われるのを防ぐために、引用ブロック内に投稿してください。おそらく、個人的な見解を追加することもできます。どのオプションを選択し、その理由を教えてください。
030

8

" when "ブロックを組み込みの "changeset"条件と組み合わせて使用すると、monorepoパイプラインの特定のステージのみを条件付きで実行できます。when.changesetのドキュメントから:

changeset-ビルドのSCMチェンジセットに、指定された文字列またはグロブと一致する1つ以上のファイルが含まれている場合にステージを実行します。例:{変更セット "** / *。js"}の場合

この戦略を使用したJenkinsfileの例を次に示します。

pipeline {
    agent any
    stages {
        stage('build matchengine') {
            when {
                changeset "**/matchengine/*.*"
            }
            steps {
                echo 'building match engine'
            }
        }
        stage('build posttrade') {
            when {
                changeset "**/posttrade/*.*"
            }
            steps {
                echo 'building post trade'
            }
        }
    }
}

、以下に示すmonorepoプロジェクト構造に適用可能:

 .(my-project)
   |-- Jenkinsfile
   |-- matchengine
   |-- posttrade
   |-- serverless
   |-- ui

どのモジュールが相互に依存しているかを追跡するのが難しいため、この戦略は過去の小さなコードベースを拡張しません。Bazelのようなビルドシステムを使用したほうがよいでしょう。CIジョブは単にbazel build // ...(すべてをビルド)を発行し、Bazelは実際にビルドする必要があるものとテストする必要があるものを計算します。さらに、どのコンテナを再構築してコンテナレジストリにプッシュする必要があるか、どのアプリケーションをKubernetesに再デプロイする必要があるかを計算できる、rules_dockerやrules_k8sなどのバゼルルールも存在します。


Unfortunatellyチェンジセットには、変更リクエストからのすべての変更は含まれず、最後の2つのコミット間のデルタのみが含まれます。ただし、カスタムチェックは簡単に実装できます。
Kirtul
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.