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 :
- Déploiement sur CloudBees
- 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
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 lancer 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éter 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-repertoires : 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.
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).
Activer 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éer 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
Activer le service "SendGrid Mail Server" pour votre compte a partir de l'interface Apps.
Cliquez sur Alert Settings (http://sendgrid.com/alerts) pour définire 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ètre de configuration.
Ajouter, dans le répertoire WEB-INF/conf/override/ de votre profile de déploiement du sur CloudBees ou dans votre webapp, un fichier config.properties avec le éléments suivant configurés :
config.properties ################################################################################ # 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'a partir de la version 4.1.0 de Lutece.