2016-08-23 5 views
1

私はOpenshiftに展開したいマルチモジュールのスプリングブートプロジェクトを持っています。そこにはJenkinsもインストールされています。ソースコードはGithubでホストされています。 各モジュールはmicroservices構造を持つために、戦争で構成されていますOpenShiftにマルチモジュールMavenスプリングブートアプリケーションをインストールする方法

<modules> 
     <module>xyz-common</module> 
     <module>xyz-data-services</module> <!--a REST service to interact with mongodb--> 
     <module>xyz-batch-importer</module> <!--a service to import files into Mongo--> 
     <module>xyz-frontend</module> 
    </modules> 

私は、単一のスプリング・ブートアプリケーションを展開するためのチュートリアルを見つけたが、私は、これはマルチモジュールMavenプロジェクトに適用する方法を見つけ出すことはできません。

+0

マイクロサービスアーキテクチャの主な目標の1つは、各アプリケーションを個別に展開することです。 –

+0

どうすればいいですか?モジュールごとに異なるプロジェクトを作成しますか? –

答えて

1

openshiftでマルチモジュールのmavenプロジェクトを扱う場合は、openshiftにビルド方法を伝える必要があります。この作業は、ビルド環境変数を定義するか、Openshiftで解釈できるカスタムビルドスクリプトを作成することで実現できます。

あなたが最初の方法で作業したい場合は、ビルド設定のために「MAVEN_ARGS_APPEND」変数を定義することによって、プロセスを構築しながら、追加のMavenコマンドを使用するopenshiftを伝えることができます:あなたはthisチュートリアルに従うことができ、両方の方法については

したがって、openshiftでビルド操作を開始すると、これらの追加パラメータでアプリケーションをビルドすることをMavenに伝えます。

独立戦争のモジュールをデプロイするために、下記の追加のビルド環境変数を定義します。

MAVEN_ARGS_APPEND:-plモジュール名--also-作る

ARTIFACT_DIR:モジュール名/ターゲット/

MODULE_DIR:モジュール名

ここで、 "-pl"コマンドは、すべての依存関係を持つ "xyz-data-services"を構築します。したがって、あなたの "xyz-data-services"モジュールが "xyz-common"への依存性を持っているなら、mavenは "xyz-common"をビルドし、 "xyz-data-services"に関する関連アーティファクトを作成し、それらを一緒にパッケージ化し、 "xyz-データサービス "をポッド上の戦争とみなしています。

"xyz-data-services"モジュールと "xyz-front-end"モジュールを戦争としてパッケージ化して展開したいとします。

ケース1:

あなたは自己展開可能なこれらのモジュールを作りたい場合は、あなたが別のポッド上で実行される2つのアプリケーションを作成する必要があります。

MAVEN_ARGS_APPEND: -pl xyz-data-services --also-make 
ARTIFACT_DIR:  xyz-data-services/target/ 
MODULE_DIR:   xyz-data-services 

そして、これらの人があります第二1:

最初のアプリケーションは、これらのビルド環境変数があります

MAVEN_ARGS_APPEND: -pl xyz-front-end --also-make 
ARTIFACT_DIR:  xyz-front-end/target/ 
MODULE_DIR:   xyz-front-end 

ケース2:あなたはこれらのモジュールを展開する場合

同じポッドに追加すると、プロジェクトに追加モジュールを追加して、両方の戦争を単一の耳にパッケージ化し、この耳の変数を定義することができます。

この耳を「webapp」にすると、親のpomは次のようになります。

... 
<modules> 
    <module>xyz-common</module> 
    <module>xyz-data-services</module> 
    <module>xyz-batch-importer</module> 
    <module>xyz-frontend</module> 
    <module>xyz-webapp</module> 
</modules> 
... 

xyz-webapp pomは次のようになります。

.... 
<artifactId>xyz-webapp-</artifactId> 
<dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>xyz-common</artifactId> 
     <version>${project.version}</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>xyz-data-services</artifactId> 
     <version>${project.version}</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>xyz-frontend</artifactId> 
     <version>${project.version}</version> 
     <type>war</type> 
    </dependency> 
</dependencies> 
.... 

したがって、ビルド環境変数は次のようになります。

MAVEN_ARGS_APPEND: -pl xyz-webapp --also-make 

ARTIFACT_DIR: xyz-webapp/target/ 

MODULE_DIR: xyz-webapp 

シングルウォーとシングルポッドで作業したい場合は、

ケース3:

あなたはただあなたがしたいですか。その場合に上に行くことができ戦争としてフロントエンド・アプリケーションをパッケージ化し、すべてが「.jars」

としてパッケージ他のモジュールへの依存関係を宣言することができます。ここで重要なのは、あなたの「マイクロサービス」の実装に依存していることです。 「マイクロサービス」の用語と実装は明示的に定義されておらず、アーキテクチャやビジネス要件によって変化する可能性があるため、フロントエンド、API、バックエンドを一緒にパッケージ化するか、独立して管理するかはあなたの判断です。

関連する問題