2016-08-23 32 views
1

我有一個多模塊彈簧引導項目,我想在Openshift上部署,我也安裝了Jenkins。源代碼在Github中託管。 每個模塊包括一戰,爲了有一個微服務結構:如何在OpenShift上部署多模塊Maven Spring引導應用程序

<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

這是微服務架構的主要目標之一:獨立部署每個應用程序! –

+0

那麼我該怎麼做?爲每個模塊創建不同的項目? –

回答

1

如果你想在openshift上使用多模塊maven項目,那麼你必須告訴openshift如何構建它們。您可以通過定義構建環境變量或編寫可由Openshift解釋的自定義構建腳本來實現此任務。

對於這兩種方法,你可以按照this教程:

如果你想用第一種方法來工作,你可以告訴openshift而通過定義「MAVEN_ARGS_APPEND」變量構建配置構建過程中使用額外的Maven命令。

因此,當構建操作在openshift上啓動時,它會告訴Maven使用這些附加參數構建應用程序。

定義,下列獨立戰爭部署額外的模塊構建環境變量:

MAVEN_ARGS_APPEND:-pl MODULENAME - 兼 - 讓

ARTIFACT_DIR:MODULENAME /目標/

MODULE_DIR:MODULENAME

在這裏「-pl」命令提供了構建「xyz-data-services」及其所有依賴關係。因此,如果你的「xyz-data-services」模塊依賴於「xyz-common」,那麼maven將構建「xyz-common」,爲「xyz-data-services」創建相關的工件,將它們打包在一起並部署「xyz-數據服務「,如同戰爭中的戰爭一樣。

對於你的情況,假設你想打包「xyz-data-services」模塊和「xyz-front-end」模塊並將其部署。

案例1:

如果你想使這些模塊自部署,那麼你必須創建一個將在不同的吊艙運行兩個應用程序。

首先應用程序將這些構建環境變量:

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

,第二個會有這些傢伙:

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

案例2:

如果要部署這些模塊然後你可以添加一個額外的模塊到你的項目中,將兩個戰爭打包成一個耳朵併爲這個耳朵定義變量。

因此,讓這個耳朵是「webapp」,你的父母看起來像;

... 
<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 

如果你只想用單一的戰爭和單一的pod工作;

案例3:

你可以只打包前端應用程序作爲戰爭和聲明依賴於所有包裝成「.jar文件」

你可以去上這種情況下,你想其他模塊。這很重要,它取決於你的「微服務」實現。由於「微服務」術語和實現沒有明確定義,並且可能因體系結構或某些業務需求而異,所以您決定將前端,api,後端打包在一起或獨立管理它們。

相關問題