2016-08-23 1 views
1

J'ai un projet de démarrage à ressort multi-module que je veux déployer sur Openshift, où j'ai également installé Jenkins. Le code source est hébergé dans Github. Chaque module est constitué dans une guerre, afin d'avoir une structure de microservices:Comment déployer l'application de démarrage multi-module maven spring sur 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> 

J'ai trouvé tutoriel pour déployer seule application démarrage de printemps, mais je ne peux pas comprendre comment cela s'applique à un projet Maven multi-module.

+0

C'est l'un des principaux objectifs de l'architecture de micro-service: déployer chaque application indépendamment! –

+0

Alors, que dois-je faire? Créer des projets différents pour chaque module? –

Répondre

1

Si vous voulez travailler avec le projet maven multi-module sur openshift, vous devez indiquer à openshift comment les construire. Vous pouvez réaliser cette tâche en définissant des variables d'environnement de construction ou en écrivant des scripts de construction personnalisés qui peuvent être interprétés par Openshift.

Pour les deux méthode que vous pouvez suivre this tutoriel:

Si vous voulez travailler avec la première méthode, vous pouvez dire OpenShift d'utiliser les commandes de Maven supplémentaires tout en construisant processus en définissant variable « MAVEN_ARGS_APPEND » pour config de construction. Par conséquent, lorsque l'opération de compilation commence sur openshift, Maven indique à l'application qu'elle doit générer l'application avec ces paramètres supplémentaires.

Définir les variables d'environnement de construction supplémentaires ci-dessous pour déployer des modules de guerre indépendamment:

MAVEN_ARGS_APPEND: -pl modulename --also-faire

ARTIFACT_DIR: modulename/target/

MODULE_DIR: modulename

Ici, la commande "-pl" permet de construire "xyz-data-services" avec toutes ses dépendances. Donc, si votre module "xyz-data-services" dépend de "xyz-common", alors maven construira "xyz-common", créera des artefacts associés pour "xyz-data-services", les regroupera et déploiera "xyz- données-services "comme guerre sur le pod. Dans votre cas, supposons que vous souhaitiez empaqueter le module "xyz-data-services" et le module "xyz-front-end" comme guerre et les déployer.

Cas 1:

Si vous voulez faire de ces modules d'auto déployable, vous devez créer deux applications qui fonctionneront sur différentes gousses.

La première application aura ces variables d'environnement de construction:

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

et le second aura ces gars-là:

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

Cas n ° 2:

Si vous souhaitez déployer ces modules dans le même pod, vous pouvez ajouter un module supplémentaire à votre projet qui conditionne les deux guerres en une seule oreille et définit les variables pour cette oreille.Donc, laissez cette oreille être "webapp", votre parent pom ressemblera;

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

et le xyz-webapp pom ressemblera;

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

Ainsi, vos variables d'environnement de construction seront;

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

ARTIFACT_DIR: xyz-webapp/target/ 

MODULE_DIR: xyz-webapp 

Si vous voulez travailler avec une seule guerre et un seul pod alors;

Cas n ° 3:

Vous pouvez simplement emballer application fin avant que la guerre et déclarer des dépendances à d'autres modules qui sont tous emballés comme « .jars »

Vous pouvez aller avec ce cas, voulez-vous. Il est important ici que cela dépende de votre implémentation "microservices". Parce que le terme "microservice" et la mise en œuvre ne sont pas explicitement définis et peuvent varier en fonction de l'architecture ou de certaines exigences de l'entreprise, vous devez choisir entre l'interface frontale, l'API, le backend ou les gérer indépendamment.