2012-01-19 8 views
20

私は、トップレベルのmavenプロジェクトの束を含むGitリポジトリを持っています(それぞれは、pom.xmlを持つそれぞれのサブディレクトリにあります)。トップレベルは、これらのプロジェクトがリポジトリルートの直下のサブディレクトリにあることを意味します。これらのプロジェクトはすべて同じGitリポジトリにとどまるべきです。Jenkins:gitリポジトリから複数のトップレベルプロジェクトをビルドする方法は?

repo 
+--- projectA 
    +--- pom.xml 

+--- projectB 
    +--- pom.xml 

これらは、独立したジェンキンジョブによって構築することができます。だから私たちはprojectAの仕事とprojectBの仕事を持っています。

以前はSubversionを使って、プロジェクトソースのみをチェックアウトし、pom.xmlからMavenビルドを実行するJenkinsジョブを(各プロジェクトごとに)設定することができました。

Gitモデル(おそらくすべてのDVCSで同じです)ではこれが変わり、ベストプラクティスは何か分かりません。私が見ている該当なしから、私は本当に好きないくつかのオプションがあります:

  1. 各ジェンキンスジョブが複製するconfiguredですが/フルGitのレポを引くと は、Mavenの構築のために/pom.xmlを指します。したがって、ジョブ にはすべてのコードが含まれていますが、そのスライスだけがビルドされています。
  2. Gitが扱うには少しトリッキーなこと(と簡単に破ることができる) に思えるサブモジュール(http://book.git-scm.com/5_submodules.html)を提供しています
  3. は、Mavenの親(プロジェクトのすべてが含まれているアグリゲータ)を作成します は、各プロジェクトをトリガーするプロジェクトが持つ(ビルド単一のジェンキンジョブ)。このpom.xmlには、projectAおよびprojectBの要素が含まれています。

さらに便利なアプローチがありますか(非常に典型的な設定です)。あなたの経験は何ですか?ベストプラクティス?

+0

私はmartin.ahrerに非常に同意します。Subversionと比較すると、Gitはリポジトリのサブプロジェクトをチェックアウトする能力を持たないことが制限要因です。私はこの質問に素敵な答えが素晴らしいだろう。 – djangofan

答えて

4

私はここで穀物に反対していると思います。これらのプロジェクトがバージョン化されたユニットとしてリリースされた場合は、実際に親POMを作成する必要があります。しかし、たぶん単一のCIジョブしか持っていないはずです。そのビルドを素早く実行したい場合は、最後のビルド以降に変更されたモジュールのみをビルドするように構成することができます(ビルドセクションの「拡張ビルド - 変更されたモジュールをビルドする」)。複数のコミットを一度にテストするために、Jenkinsに「必要に応じて並行ビルドを実行する」ように指示することもできます。

しかし、なぜあなたは複数のCIジョブが必要だと思っているのでしょうか?これらの2つのプロジェクトが異なるライフサイクルを持っていると感じる場合は、別々にバージョン管理する必要があり、したがって別々のgitリポジトリに配置する必要があります。 gitリポジトリを節約しないでください。安価です。実際には、ほとんどすべてのケースでより多くの仲良し。

通常、指定したpomに1つのアーティファクトを生成させます。アグリゲータポムは、大きなアーティファクトの一部をサブモジュールに分割するのに便利ですが、サブモジュールが単独でリリースされない場合にのみ有効です。

0

あなた自身を繰り返さないのがベストプラクティスです。だからスーパーPOMを持つことは、その立場からは良いでしょう。

おそらくオプション1を使用します。ディスク容量は通常安いです。

しかし、3では、Jenkinsを再びセットアップすることなく、新しいシステムに簡単に導入できます。

1

@recampbell、私は同じ問題があります。単一のHgリポジトリに複数の相互に関係するプロジェクトがあります。

私たちがどのバージョン(hgバージョン番号)を正確に知っているかのように、お互いがコンパイルします。私が正確に言うと、私はそれがバイナリであることを確認できます。

リリース番号の使用が粗すぎます。今日の例では、hgバージョン3367ではなくhgバージョン3368でのみ再現可能なバグを発見しました。毎日プロジェクトごとに複数のコミットが存在するため、複数のhg reposを使用すると再現できませんでした。個々のプロジェクトのどのバージョンが使用されたのかを正確に判断することは不可能で、使用する正しいバージョンはhgバージョンのみです(bisectを使用してバグを見つける)。

サブプロジェクトの1つでクライアントデータベースドライバのバージョンが変更され、自動化されたDAOがNPEで失敗することが判明しました。ドライバはもちろん、私たちが書いていないリリースのバージョンであれば、単にベンダーが提供するバージョンを使用します。これをデバッグするのに数日かかりましたが、ジェンキンスを使用して1時間ごとにビルドするので、検索するコミットが10〜20件、ダオジェネレータに3〜4回しか触れていないことが分かりました。

私たちはいくつかの異なるdao-generator-3.1.2.jarを持っているので、すべてのプロジェクトの混在したバージョンは後部背面の背面に痛みを伴うでしょう。すべてのコミット後にバージョン番号を変更することを期待するか、Jenkins/maven /に何らかの設定がある場合は自動的にこれを行いますか?それは素晴らしいことです...)。

関連する問題