如何在OpenShift上部署多模块Maven Spring引导应用程序

问题描述:

我有一个多模块弹簧引导项目,我想在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

那么我该怎么做?为每个模块创建不同的项目? –

如果你想在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,后端打包在一起或独立管理它们。