2012-09-11 9 views
5

私はJenkins 1.462を使用しており、mavenバージョンは3.0.4です。ジェンキンスで はIチェックボックスを有効にし、「インクリメンタルビルド - のみ変更されたモジュールをビルド」私は2つの質問を理解したいJenkinsのインクリメンタルビルド

を:インクリメンタルビルドが十分であるかどうか

  1. を? ここではHow do I trigger a Jenkins build of a single module in a multi-module Maven build from Subversion?は100%で動作しないと記載されています ここではhttp://www.slideshare.net/andrewbayer/7-habits-of-highly-effective-jenkins-usersは19ページで、インクリメンタルビルドはフルビルドで補完的であり、補充ではありません。

  2. 増分ビルドのみ変更されたモジュールを変更しましたは実際には期待通りに動作しますか? これはどういう意味ですか?モジュールA、B、X、C、Dを持つ場合、XはAとBを使用し、CはXを使用し、DはCを使用し、Xモジュールを変更します。モジュールX(itslef)、C(Xを直接使用する)、D(推移閉包、DはCを使用するC)を再コンパイルしたい。

注:これは増分ビルドを有効にするために行った唯一の変更です。

答えて

3

インクリメンタルビルドMavenのドキュメントで述べたように、少なくとも3.0.4までは非常に信頼性がありません。

現在

(3.0.4)のApache Mavenは非常に もインクリメンタルビルドをサポートしていません。

https://cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds(最初の行)

代わりに、私は強くあなたのビルドをスピードアップするために、これら2つのアプローチのいずれかを使用することをお勧めします:

並列ビルドを使用して
  • 。大規模なプロジェクトでの私の経験では、これはうまく動作し、最小限のリスクでビルド時間を大幅に短縮することができます。 mvn -T 1.5C clean installhttps://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

  • あなたのモジュールが独立している場合は、それらを別のプロジェクトに移動し、maven依存関係を使用して接着することができます。

+0

提案された解決策は、非常に深刻な問題を引き起こします。ジェンキンスで "mvn install"を使用すると、ビルドマシンが1台以上ある場合や1つ以上のブランチをビルドすると予期しない動作が発生します。一般的に言えば、ビルドマシンの状態に決して依存してはいけません。なぜなら、 "mvn install"は非常に危険なアイデアなのです。相互依存関係がある場合、リポジトリマネージャを使用し、必要に応じて依存バージョンを更新します(バージョンを上書きしないと、再現性が失われます)。 – marcv81

+1

こんにちはmarcv81、mvn installは必ずビルドマシンの状態に依存しません。リリースにMavenを使用している場合は、中央リポジトリを使用してアーティファクトをプッシュしてプルする必要があります。どのような場合でも、Mavenにいくつかのオプションがある依存関係管理ではなく、ビルドのスピードアップに関する質問があれば、他のターゲットのインストールを置き換えることができます。 –

+0

こんにちはAdrian、mvn installは、ローカルリポジトリに成果物をインストールするので、ビルドマシンの状態をデフォルトで変更します。これは、現在のビルドに依存している次のビルドの結果に影響します。質問はパフォーマンスに関するものですが、答えが壊れて再現性が損なわれるので、私のdownvote/comment。アーティファクト・リポジトリを使って言及しました。これを正しく実装するには、ビルドごとに新しいVMをスピンアップすることをお勧めします。貧乏人のバージョンは、すべてのビルドの前にrm -rf〜/ .m2/repositoryにあります。 – marcv81