如何在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项目。
如果你想在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,后端打包在一起或独立管理它们。
这是微服务架构的主要目标之一:独立部署每个应用程序! –
那么我该怎么做?为每个模块创建不同的项目? –