9

現在、ビルド用のいくつかの一般的な親POMを除いて、複雑な依存関係を持つ多くの単一のスタンドアロンプ​​ロジェクトのコレクションである大きなMaven2プロジェクトがあります。結局、アプリケーションは常に1つのピースとして出荷する必要があるため、1つまたはいくつかの大きなプロジェクトに変換したいと思います。

大規模なプロジェクトの継続的インテグレーションビルドを最適化する方法の経験はありますか?MavenまたはHudsonのインクリメンタルビルド機能は良いですか?1つのモジュールに小さな変更を加えただけの場合は、常に2時間待たないようにします。

一方、確かに、変更されたモジュールの少なくともすべての直接および間接の依存関係を再構築して再テストする必要があります。これは、現在ハドソンで行っていることでもあり、すべての依存ジョブを自動的にトリガーします。

同じプロジェクトの複数のビルドジョブに分割することで成果が得られますか?私は通常、レポートやドキュメントなど、他のすべての生成されたものが古くなっている可能性があるサーバー上にアーティファクトを置くのは好きではありません。

考えてくれてありがとう。

4

2 に答える 2

8

さらにテストを行ったところ、Mavenは実際にはインクリメンタルビルドをサポートしていないことがわかりました。プラグインがないと、Mavenは実際には危険な動作をします。一部のモジュールのコードを変更し、事前のクリーンなしでコンパイルすると、依存モジュールは再構築されません。つまり、依存関係の古い古いバージョンを参照し、更新されたコードに反応しません。

インクリメンタルビルドプラグインを使用すると、クリーンなしでビルドできます。変更されたすべてのモジュールが再構築され、さらにすべての依存関係がクリーンアップされて再構築されます。ただし、私の場合、コンパイルはビルド時間の10%程度しか使用せず、90%はテスト用です。また、インストール/デプロイすると、すべてのテストが再度実行されるため、インクリメンタルビルドプラグインによる時間のメリットはごくわずかです。

ですから、私はまだハドソンでビルドを分割するオプションしか見ていません。これは私の意見ではほとんど理想的ではありません。

于 2011-06-23T10:00:45.230 に答える
6

別のビルドジョブに分割しないことを強くお勧めします。私の経験では、これはアップストリームとダウンストリームの依存関係ですぐに手に負えなくなる可能性があります。インクリメンタルビルディングは、必要なものに最適です。依存関係が直接設定されている場合、変更されたアーティファクトとその依存関係のみが再構築されます。

ビルドジョブを分割しますが、依存関係がまったくないか、ほとんどない完全に別個のアプリケーションである場合(それが当てはまる場合は、同じリアクターの下に置くべきではないため、インクリメンタルビルドは不可能です)

于 2011-06-08T16:03:49.567 に答える