" 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などのバゼルルールも存在します。