Déploiement sur CloudBees
Déployer pas à pas deux environnements LUTECE sur la plate-forme CloudBees : l’un pour la version de développement du site, l’autre pour la version de production.
Gérer ensuite le déploiement automatisé en fonction des mises à jour des composants.
Voici les différentes étapes de ce tutoriel :
Table des matières
- Intérêt de CloudBees
- Prérequis
- Création du compte Cloudbees
- Création du référentiel de code basé sur un repository GIT
- Création de la base de données
- Création des fichiers du projet
- Initialisation des bases données
- Mise à jour des fichiers du projet sur GIT
- Création des instances des applications
- Création des Jobs d’intégration continue
- Déploiement des instances
- Mise en place du service de messagerie
Intérêt de CloudBees
Les intérêts de cette plate-forme sont :
-
C’est un PaaS (Platform as a Service) qui met à disposition l’ensemble des éléments d’exécution pour les Webapp Java :
- Serveur JEE : Tomcat, JBoss, …
- Base de données : MySQL, …
Il n’y a donc aucun socle technique à installer, il faut juste fournir une Webapp.
-
La plateforme CloudBees intègre un environnement d’intégration continue basé :
- des repository de contrôle de version GIT ou SVN
- le pilote d’intégration Jenkins
Les mécanismes de build et d’assemblage de Lutece sont directement utilisables dans CloudBees.
Prérequis
-
Un JDK 6 installé
-
Un client GIT
-
Une clé publique SSH
Création du compte Cloudbees
L’inscription est gratuite et ne requiert pas l’enregistrement d’une carte banquaire.
Créer votre compte à l’adresse suivante : https://www.cloudbees.com/signup
NB : Le nom Domain/Account retenu figurera dans l’URL d’accès à l’application :
https://app_name.account_name.cloudbees.net
Création du référentiel de code basé sur un repository GIT
Ce référentiel va contenir :
- le fichier
pom.xml
permettant la construction du site, - les fichiers qui viendront surcharger au moment de l’assemblage les fichiers de la construction par défaut (ex : charge graphique, fichiers de configuration, …)
Création du repository GIT
Cliquez sur le menu Repositories du menu principal (bandeau).
Dans la section Code Repositories, cliquez sur le bouton Create new code repository.
Connexion au repository GIT
Pour se connecter, il faut disposer d’une paire de clés (public/privée) SSH comme indiqué dans les prérequis ci-dessus. En effet, l’accès au repository GIT créé suppose que vous avez enregistré votre clé publique au niveau de la plate-forme CloudBees.
Pour cela il faut cliquer sur Account (dans le bandeau à droite de votre login), puis sur Security Keys. Il vous est alors proposé de saisir votre clé publique SSH.
Tester ensuite la connexion à GIT avec la commande suivante :
$ ssh git@git.cloudbees.com echo
Création du projet local sous GIT
Positionnez-vous dans l’arborescence de votre système de fichiers local à l’endroit où vous souhaitez créer le répertoire racine de votre projet versionné par GIT (répertoire mysite
pour notre exemple) et lancez la commande pour cloner localement le repository :
git clone ssh://git@git.cloudbees.com/lutece/mysite.git
Tester ensuite en effectuant un premier commit et un push vers le serveur.
cd mysite
echo 'Repository mysite' > README
git add README
git commit -m 'Initial checkin'
git push origin master
Création de la base de données
Cliquez sur le menu DBs du menu principal (bandeau).
Dans la section Database à gauche, cliquez sur le bouton Add new database.
Saisissez ensuite les informations concernant la base de données de développement pour commencer.
Une fois la base créée, vous obtiendrez les informations permettant de configurer son accès (serveur, port, …).
Répétez cette opération pour créer la base de données de production.
Création des fichiers du projet
Votre projet devra contenir au minimum les fichiers suivants :
- Le fichier pom.xml utilisé par Maven pour construire le site
- Les fichiers db.properties correspondant à nos deux bases de données DEV et PROD
Le répertoire racine du projet doit contenir deux sous-répertoires : src et webapp.
Vous pouvez ajouter dans le répertoire webapp d’autres fichiers qui viendront surcharger ou compléter ceux qui seront assemblés lors du build.
Les fichiers classiquement surchargés concernent généralement la charte graphique (ex : footer.html, page_frameset.html, icon.png, …).
Le fichier pom.xml
Ce fichier a pour caractéristiques :
- il doit dériver du fichier projet pour les sites Lutece :
lutece-site-pom
- il doit contenir les adresses des repositories maven de Lutece : versions stables et/ou snapshots selon le souhait.
- il doit déclarer dans les dépendences tous les plugins et modules à intégrer dans le site.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.paris.lutece</groupId>
<artifactId>mysite</artifactId>
<packaging>lutece-site</packaging>
<name>My Site</name>
<version>1.0.0-SNAPSHOT</version>
<!-- This project should inherit from lutece-site-pom -->
<parent>
<artifactId>lutece-site-pom</artifactId>
<groupId>fr.paris.lutece.tools</groupId>
<version>2.0.2</version>
</parent>
<!-- Repositories -->
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>luteceSnapshot</id>
<name>luteceSnapshot</name>
<url>http://dev.lutece.paris.fr/snapshot_repository</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>lutece</id>
<name>luteceRepository</name>
<url>http://dev.lutece.paris.fr/maven_repository</url>
</repository>
</repositories>
<dependencies>
<!-- Lutece core -->
<dependency>
<groupId>fr.paris.lutece</groupId>
<artifactId>lutece-core</artifactId>
<version>[4.1.0-SNAPSHOT,5.0.0-SNAPSHOT]</version>
<type>lutece-core</type>
</dependency>
<!-- Plugins of my site -->
<!-- Contact -->
<dependency>
<groupId>fr.paris.lutece.plugins</groupId>
<artifactId>plugin-contact</artifactId>
<version>[2.1.2,6.0.0-SNAPSHOT]</version>
<type>lutece-plugin</type>
</dependency>
...
<!-- Wiki -->
<dependency>
<groupId>fr.paris.lutece.plugins</groupId>
<artifactId>plugin-wiki</artifactId>
<version>[0.9.0,4.0.0-SNAPSHOT]</version>
<type>lutece-plugin</type>
</dependency>
<dependency>
<groupId>fr.paris.lutece.plugins</groupId>
<artifactId>module-seo-wiki</artifactId>
<version>[0.9.0,4.0.0-SNAPSHOT]</version>
<type>lutece-plugin</type>
</dependency>
</dependencies>
</project>
Les fichiers de configurations de la base de données
Ces fichiers doivent se trouver dans les répertoires suivants :
/webapp/src/conf/dev/WEB-INF/conf/db.properties
/webapp/src/conf/prod/WEB-INF/conf/db.properties
Voici le contenu par exemple du fichier qui permettra l’accès à la base de développement :
# Configuration file for Lutece to parameterize connections pools to databases
portal.poolservice=fr.paris.lutece.util.pool.service.LuteceConnectionService
portal.driver=org.gjt.mm.mysql.Driver
portal.url=jdbc:mysql://ec2-50-19-213-178.compute-1.amazonaws.com/mydatabase-dev?autoReconnect=true&useUnicode=yes&characterEncoding=utf8
portal.user=myuser-dev
portal.password=<my password>
portal.initconns=2
portal.maxconns=50
portal.logintimeout=2
portal.checkvalidconnectionsql=SELECT 1
Initialisation des bases données
La solution la plus simple pour initialiser les bases de données est de construire en local les deux webapps et de jouer les scripts de création.
Les fichiers db.properties devront être préalablement correctement configurés pour accéder aux bases distantes (hébergées chez Amazon au moment de la rédaction du tutoriel)
L’accès aux bases distantes peut poser un problème si vous êtes derrière un proxy qui ne vous autorise pas le port 3306.
Pour construire en local la webapp de dev et lancer l’initialisation de sa base distante, voici les commandes :
mvn clean lutece:site-assembly -P dev
cd target/mysite-1.0.0-SNAPSHOT/WEB-INF/sql
ant
Pour la base de production, remplacer dev
par prod
dans la première commande.
Mise à jour des fichiers du projet sur GIT
Une fois que tous les fichiers du projet sont prêts, vous devez les “pousser” dans la branche du repository GIT.
Pour cela, les trois commandes à exécuter :
git add <files>
git commit -m "Project files added"
git push origin master
Création des instances des applications
Cliquez sur le menu Apps du menu principal (bandeau).
Dans la section Database à gauche, cliquez sur le bouton Add new application.
Saisissez ensuite le nom de l’application (mysite-dev
et mysite
pour l’exemple) dans le formulaire ci-dessous :
Création des Jobs d’intégration continue
Cliquez sur le menu Builds du menu principal (bandeau).
Activez la mise à disposition d’une plate-forme d’intégration continue Jenkins.
Une fois la plate-forme disponible, cliquez sur Create Job.
Il vous faut alors donner un nom : "Deploy DEV"
, sélectionner le type de Job : "Free-Style project"
et valider.
Attention ! Ne plus choisir
"Build Maven 2/3 project"
qui oblige désormais à créer un artifact pour déployer le war dans RUN@Cloud.
Vous aurez ensuite à saisir la configuration détaillée du Job.
Les seules informations à saisir sont :
- Le type repository : GIT et l’URL de celui-ci : ssh://git@git.cloudbees.com/lutece/mysite.git
- Dans la rubrique Build, Exécuter un script shell - commande : mvn clean lutece:site-assembly -Pdev -DfinalName=mysite-dev
- Les actions à la suite du build pour lesquelles nous allons choisir Deploy Host service CloudBees RUN@cloud service mysite-dev
Le second Job à définir pour la production, "Deploy PROD"
, peut être créé par clonage du précédent.
Les seules différences sont :
- Les goals et options dans la rubrique Build : clean lutece:site-assembly -Pprod -DfinalName=mysite-prod
- Les actions à la suite du build pour lesquelles nous allons choisir Deploy Host service CloudBees RUN@cloud service mysite
Par ailleurs, il faut décocher l’option de lancement automatique du Job à chaque modification faite dans le repository GIT. Ce Job est à lancer manuellement lorsque les évolutions ont été validées sur la plate-forme de développement.
Voici la vue du tableau de bord de Jenkins, après création et lancement des jobs :
Déploiement des instances
Dans la configuration proposée, toute modification sur GIT lancera automatiquement un build complet de la webapp et son déploiement sur l’instance de développement à l’URL http://mysite-dev.myaccount.cloudbees.net
.
Si les tests sont satisfaisants, le lancement du Job "Deploy PROD"
pourra se faire manuellement depuis le tableau de bord de Jenkins.
Si tout se passe bien, vous devriez obtenir votre instance Lutece à l’URL http://mysite.myaccount.cloudbees.net
.
Mise en place du service de messagerie
Activez le service "SendGrid Mail Server"
pour votre compte à partir de l’interface Apps.
Cliquez sur Alert Settings (http://sendgrid.com/alerts) pour définir l’adresse mail de notification du service.
Initialisez votre mot de passe : https://sendgrid.com/user/forgotPassword
Cliquez sur Developer (http://sendgrid.com/developer) pour afficher les paramètres de configuration.
Ajoutez, dans le répertoire WEB-INF/conf/override/
de votre profil de déploiement sur CloudBees ou dans votre webapp, un fichier config.properties
avec les éléments suivants configurés :
# Mail sending parameters (ip address of the mail server)
# username and password if authentication needed - empty otherwise
mail.server=smtp.sendgrid.net
mail.username=<Votre compte SendGrid>
mail.password=<Votre mot de passe SendGrid>
mail.list.separator=;
mail.type.plain=text/plain;charset=
mail.type.html=text/html;charset=
mail.noreply.email=<votre mail de réponse>
Note de version : Le mode d’authentification demandé par SendGrid n’est supporté qu’à partir de la version 4.1.0 de Lutece.