問題タブ [monorepo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jenkins - サブフォルダー専用のJenkinsマルチブランチパイプライン
さまざまなアプリで git monorepo を使用しています。現在、アプリのすべてのパイプラインを含むルート フォルダーに単一の Jenkinsfile があります。commit が 1 つのアプリのみを変更した場合、すべてのアプリに対して完全なパイプラインを実行するのは非常に時間がかかります。
分岐には GitFlow のようなアプローチを使用しているため、Jenkins のマルチブランチ パイプライン ジョブはプロジェクトに最適です。
Jenkins で複数のジョブを実行する方法を探しています。それぞれのジョブは、適切なアプリケーションのコードが変更された場合にのみトリガーされます。
私にとって完璧なソリューションは次のようになります。
Jenkins には複数のマルチブランチ パイプライン ジョブがあります。それぞれが、指定されたディレクトリとサブディレクトリへの変更のみを探します。それぞれが独自の Jenkinsfile を使用します。ジョブは X 分ごとに git をプルし、既存のブランチの適切なディレクトリに変更がある場合 - ビルドを開始します。適切なディレクトリへの変更を伴う新しいブランチがある場合 - ビルドを開始します。
この実装を妨げているもの
マルチブランチ パイプラインによるスキャン実行中に無視する必要があるフォルダーへのコミットを定義する方法がありません。マルチブランチ パイプラインの「追加の動作」には、「ポーリングは特定のパスへのコミットを無視する」オプションがありませんが、パイプラインまたはフリースタイル ジョブにはあります。しかし、マルチブランチ パイプラインを使用したいです。
「project1」のみが変更された新しいブランチがある場合、「project2」のマルチブランチパイプラインがトリガーされるたびに、とにかくこの新しいブランチを検出してビルドするため、ここで説明するソリューションはうまくいきません。適切なコードに変更があったかどうかに関係なく、新しいブランチごとに、Multibranch パイプラインのそれぞれが少なくとも 1 回実行されることを意味します。
同じgitリポジトリを監視しているが、適切なコードが変更されたときにのみトリガーされるいくつかのマルチブランチパイプラインを実装する方法について、助けや提案を感謝します
git - パッケージが変更された場合にのみ VSTS で Monorepo をビルドする
VSTS で monorepo を使用している場合、コミットですべてではなく 1 つのパッケージのみを更新することがあります。その場合、その特定の部分のビルドのみを実行し、他には何も実行したくありません。
私は継続的インテグレーションを使用しているため、たとえば何かがコミットされるたびにビルドさmaster
れます。悲しいことに、このビルド プロセスには時間がかかる可能性があり、コードの 1 つのセクションだけが変更された場合は、そのプロジェクトのみをビルドしたいと考えています。
私は Git コミットを更新しているので、特定のディレクトリ内のファイルに変更が加えられたかどうかを確認することができますが、もっと良い方法があるはずだと思います.
注:私のプロジェクトは Node.js と Webpack を使用し、Docker Compose を使用してビルドします。
node.js - 2 つの lerna モノレポ間の相互依存性
同時に開発したい2つのモノレポがあります。構造は次のとおりです。
モノレポA
モノレポB
依存関係は次のとおりです。
私は使用しています
両方の monorepos でコマンドを実行します。これにより、1 つの monorepo 内ですべてがうまくいきます。今はレギュラーでやってます
依存関係に従って monorepoB 内。
これは componentB2 では機能しますが、componentB1 では失敗します。問題は、リンクされたコンポーネント自体が内部パッケージに依存している場合、リンクが機能しないことです。
monorepoB で npm ls componentA2 を実行すると、
ただし、componentA1 へのリンクは有効です (ただし、推移的な依存関係はありません)。
この問題を解決するには?
javascript - TFS CI を使用した複数の cobertura カバレッジの公開
lerna で作成した monorepo プロジェクトがあります。また、単体テストには Karma+Jasmine を使用しています。プロジェクト構造は次のようになります。
テスト セットアップは適切に機能しており、HTML レポートと、coverage.xml
個々のパッケージ内の Cobertura 形式のレポートを生成しています。TFS CI には、「コード カバレッジ結果の発行」ビルド ステップがあり、さまざまなオプションに対して次の値を使用してカバレッジ結果を発行します。
- コード カバレッジ ツール:
Cobertura
- 要約ファイル:
$(System.DefaultWorkingDirectory)\packages\*\coverage\cobertura\coverage.xml
- レポート ディレクトリ:
$(System.DefaultWorkingDirectory)\packages\*\coverage
(HTML レポートの場合)
ただし、ビルドステップは次のことについて警告します
複数のファイルまたはディレクトリの一致が見つかりました。最初の一致を使用: C:\MyAgent\path\to\packages\package1\coverage\cobertura\coverage.xml
複数のファイルまたはディレクトリの一致が見つかりました。最初の一致を使用: C:\MyAgent\path\to\packages\package1\coverage
当然、1 つのパッケージのみのカバレッジ結果も表示されます。各パッケージの CI にビルド ステップを追加せずに、すべてのカバレッジ レポートを公開する方法はありますか?