2016-08-23 2 views
1

У меня есть многомодульный проект весенней загрузки, который я хочу развернуть на Openshift, где я также установил Jenkins. Исходный код размещен в Github. Каждый модуль состоит в войне, чтобы иметь структуру microservices:Как развернуть мультимодульное приложение весеннего ботинка maven на OpenShift

<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

Если вы хотите работать с мультимодульным проектом maven при спусках вверх, то вам нужно сказать, что нужно открыть их, как их построить. Вы можете достичь этой задачи, определив переменные среды сборки или создав скрипты пользовательской сборки, которые можно интерпретировать с помощью Openshift.

Для оба методы вы можете следить за this учебником:

Если вы хотите работать с первым методом, вы можете сказать OpenShift использовать дополнительные команды Maven во время процесса построения пути определения «MAVEN_ARGS_APPEND» переменного для построения конфигурации.

Итак, когда операция сборки начинается с открытия спуска, она сообщит 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:

Если вы хотите, чтобы сделать эти модули самостоятельно развертываемыми, то вы должны создать два приложения, которые будут работать на разных стручках.

Первое приложение будет иметь эти переменные среды сборки:

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», ваш родительский 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»

Вы можете продолжать с этим случаем вы хотите. Здесь важно, что это зависит от реализации «микросервисов». Поскольку термин «микросервис» и реализация не определены явно и могут варьироваться в зависимости от архитектуры или некоторых бизнес-требований, ваше решение заключается в том, чтобы объединить интерфейсы front-end, api, backend или самостоятельно управлять ими.

Смежные вопросы