2013-10-07 13 views
5

私はJenkinsをたくさん使い、クラスタ上でさまざまなジョブを実行します。毎回、その後、ある仕事が何らかのエラーで失敗し、ジョブAがアーティファクトXを使用していて、ジョブBがちょうどダウンロードしたか、または新しいバージョンをビルドしたということをデバッグすることができました。 。JenkinsでMavenの同時ビルドを処理する方法は?

ジョブAはjava.lang.NoClassDefFoundErrorまたはZIPファイルが破損しているか、Javaが使用しているZIP実装のsegfaultで失敗します。

したがって明らかな解決策は、ジョブのためのプライベートローカルメイヴァンリポジトリを使用することですが、それはかなりディスクとインターネットの高価なソリューションです。これは、それぞれの仕事がインターネット全体をダウンロードすることを意味します。

破損しているJARファイルのクラスファイルを頻繁に読み込むと、ダメージを制限するのに役立ちますが、そのすべてを行う必要はありません。

他の解決策はありますか?リポジトリのロックを改善しましたか?

+0

「上流/下流プロジェクトのビルド中にロックを作成する」オプションを検討しましたか? – artbristol

+0

はい、これを使用していますが、これはほぼすべての依存関係でほとんど発生する可能性があります。すべてのプラグインを使用すると、一度にmavenを実行できるジョブは1つしかありません: – toomasr

答えて

4

はい、mavenは1つのローカルリポジトリへの同時アクセスが嫌いです(ちょうど7年前にissueが最近オープンしました)。各ジョブのレポを作成することは非常に大規模になる可能性があります。しかし、変数$EXECUTOR_NUMBERがあるので、それを使って各Jenkinsエグゼキュータごとにmavenローカルリポジトリを作成することができます。

+2

Jenkinsの設定オプションを使用して、ジョブまたはエグゼキュータ – khmarbaise

+0

@khmarbaiseはい、良い点です。エグゼキュータ依存のレポの場所は、jenkinsのグローバル設定で設定できます。 – kan

関連する問題