8 mars 2018 15:32:27 seb leridon avatar

Déploiement sur CloudBees


CloudBees Logo

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 :

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


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

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

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 :

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