68
Soirée Technique : L’intégration continue avec Maven 2 1 Présentation So@t License Creative Commons 2.0 – Share Alike Retour d’expérience sur la mise en œuvre de Maven dans un processus d’intégration continue

Présentation sur Maven 2 et petit retour d'expérience

Embed Size (px)

Citation preview

Page 1: Présentation sur Maven 2 et petit retour d'expérience

Soirée Technique :L’intégration continue avec Maven 2

1Présentation So@tLicense Creative Commons 2.0 – Share Alike

Retour d’expérience sur la mise en œuvre de Maven dans un processus

d’intégration continue

Page 2: Présentation sur Maven 2 et petit retour d'expérience

Agenda

Rappels sur l’intégration continueEnjeux de l’intégration continueOutils pour sa mise en œuvre

Rappels sur Maven 2Un peu d’histoire…NotionsDans la vrai vie…

Exemple de mise en œuvreBonnes pratiques Maven

2Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 3: Présentation sur Maven 2 et petit retour d'expérience

3Présentation So@tLicense Creative Commons 2.0 – Share Alike

Rappels sur l’intégration continue

Page 4: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

4Présentation So@tLicense Creative Commons 2.0 – Share Alike

Enjeux de l’intégration continue

Page 5: Présentation sur Maven 2 et petit retour d'expérience

Présentation So@tLicense Creative Commons 2.0 – Share Alike

5

Source: http://www.agitar.com/solutions/why_unit_testing.html

Les 5% de bugs découverts après la release représentent 95% des coûts de correction

Rappels sur l’intégration continue

Enjeux de l’intégration continue

Page 6: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Enjeux de l’intégration continue

Point cruciaux :Traçabilité de la vie du projetReproductivité de l’environnement de compilationReproductivité de l’environnement technique

6Présentation So@tLicense Creative Commons 2.0 – Share Alike

Socle technique

Environnement de build

Intégration continue

Page 7: Présentation sur Maven 2 et petit retour d'expérience

Intégration continue ?Processus d'automatisation des tâches récurrentes (construction, déploiement, exécutions des tests unitaires et d'intégration, ...)

Intérêt de l’intégration continue ?Sa fréquence d'exécution!Mise à disposition régulière de nouvelles versions d'une application

=> Meilleure visibilité!

Présentation So@tLicense Creative Commons 2.0 – Share Alike

7

Rappels sur l’intégration continue

Enjeux de l’intégration continue

Page 8: Présentation sur Maven 2 et petit retour d'expérience

Présentation So@tLicense Creative Commons 2.0 – Share Alike

8

Spécifications

Développement, correction d’une

fonctionnalitéImplémentation de la fonctionnalité ou correction et des tests unitaires

Compilation privée du module ou projet

Enregistrement dans le SCM

1

Détection du besoin

d’intégrationEvènements envoyés par le SCM

Scrutation du SCM

Périodique, manuelle

2

Intégration

Mise à jour depuis le SCM

Compilation du projet

Tests unitaires et d’intégration

Analyses de la qualité de code

3

Historisation et publication des

résultatsEnregistrement des résultats

Génération des rapports

Notifications des résultats

Publication de l’artéfact

4

Rappels sur l’intégration continue

Enjeux de l’intégration continue

Page 9: Présentation sur Maven 2 et petit retour d'expérience

Ne se résume pas seulement à la simple mise en œuvre d'un outil permettant d'automatiser la compilation! C’est un processus qui va orchestrer le quotidien des développeurs autours de :

Un outil de construction automatisée (Ant, Maven, …),Un unique système de gestion de sources (SVN, CVS, GIT, …), Un serveur d'intégration continue (Hudson, Bamboo, Cruise Control, …)

Présentation So@tLicense Creative Commons 2.0 – Share Alike

9

Rappels sur l’intégration continue

Enjeux de l’intégration continue

Page 10: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Enjeux de l’intégration continue

L’intégration est une activité complexe…L’effort augmente significativement avec :

le nombre d’artéfacts,les tests d’intégration…et leurs définitions,le nombre d’erreurs,la qualité du code,…le temps écoulé depuis la dernière intégration.

10Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 11: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Enjeux de l’intégration continue

L’intégration continue est apparue avec les pratiques XP avec comme motivation de remplacer les grosses et longues phases d’intégration en fin de projet par des phases plus petites et plus fréquentesL’idée principale :

Réduire au minimum l’effort d’intégration de l’application sans altérer le processus de développement logiciel

11Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 12: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Enjeux de l’intégration continue

12Présentation So@tLicense Creative Commons 2.0 – Share Alike

dans l’espace

p0

p1

pj

pic

dans le tempst1 tit0

Les builds sur les postes p0, p1, pi, pic… doivent être identiques

Ex : il faut pouvoir reproduire le build sur l’ensemble des postes de l’équipe mais aussi sur le serveur d’intégration continu

Les builds aux temps t0, t1, ti, … doivent être identiques

Ex : il faut pouvoir à tout moment reproduire le build d’une version taggée

Page 13: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Enjeux de l’intégration continue

13Présentation So@tLicense Creative Commons 2.0 – Share Alike

Le build est une opération qui paraît simple, mais dans les faits c’est une problématique compliquée et nous ne disposons toujours pas de solution qui permette d’assurer cela…

Page 14: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

14Présentation So@tLicense Creative Commons 2.0 – Share Alike

Et dans la pratique ?

Page 15: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Et dans la pratique ?

Utiliser un outils de buildUtiliser un SCMUtiliser un framework de tests unitairesUtiliser un serveur d’intégration continueUtiliser un framework de tests fonctionnelsUtiliser un outils de suivi de faits techniques (DM ou RA)

… Connaître son processus (du développement à la phase de livraison…)… S’aider de l’existant et communiquer… Apporter la culture

15Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 16: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Et dans la pratique ? - Outils (1/2)

Outils de buildAntMaven

SCMSVNCVSClearCaseGIT

Serveur d’intégration continueHudsonContinuumBambooTeamCityCruiseControl

16Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 17: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Et dans la pratique ? - Outils (2/2)

Framework de tests unitairesJunitTestNGMockito

Framework de tests fonctionnelsFitnessSelenium + Tellurium

Outils de suivi de faits techniquesJira

Communiquer… intelligemment…Wiki

17Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 18: Présentation sur Maven 2 et petit retour d'expérience

Présentation So@tLicense Creative Commons 2.0 – Share Alike

18

Production de code

Outil de compilation

Intégration continue

Gestion de configuration

Accueil d’un nouveau développeur

Enregistrement des modifications

Compilation, tests

Analyses de code

Détection du besoin d’intégration

Chargement de modifications

Gestion de dépendances

Compilations privées

pom.xml

Rappels sur l’intégration continue

Et dans la pratique ? – En quelques mots…

Page 19: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Et dans la pratique ? – Pratiques et anti-pattern (1/3)

Détecter et résoudre les problèmes au plus tôtCommiter du code qui marche fréquemment

Exécuter des builds privésDévelopper de petites tâchesCommenter chaque commit

Valider le build par des tests (unitaires et fonctionnels) qui passent à 100%

Pas de test = pas d’erreur, les tests doivent être pertinentsPrendre en compte la couverture de test

Intégrer après chaque commitTemps de build < 10 minDistinguer les tests unitaires des tests d’intégration, fonctionnels, etc.Exécuter une intégration complète au moins une fois par jour

Corriger les échecs de builds immédiatement ! Stopper les commits !Adapter le système de notification à l’équipe

19Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 20: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Et dans la pratique ? – Pratiques et anti-

pattern (2/3)Reproduire le build dans le temps et l’espace

Le build doit être automatisé au maximumL’environnement de build doit être propre

Privilégier le checkout, au moins pour l’intégration complète quotidienneNettoyer le dépôt local de MavenSelon les cas, intégrer sur différentes plateformes

Dans certains l’utilisation d’un miroir du SCM peut-être utileAnti-patterns :

Absence de référentiel de sourcesIntégration sur le poste de développementUtilisation de scripts de build différents entre le développement et l’intégration

20Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 21: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur l’intégration continue

Et dans la pratique ? – Pratiques et anti-

pattern (3/3)L’amélioration de la qualité de code

L’analyse de code est à mettre en place dès le début du projetSe fixer des objectifs raisonnablesAutomatiser les tâches de relectureAnti-patterns :

Les objectifs trop ambitieux peuvent découragerSélectionner les règlesPrévoir du temps dédier à l’amélioration de la qualité de code

Sentiment de flicage : les métriques ne sont pas une note En réfléchissant un peu, il est très simple de contourner les outils

d’analyse…

Excès de confianceDe bonnes métriques n’impliquent pas que l’application ne

comporte pas de bogues, ou que de mauvaises pratiques n’ont pas été implémentées

21Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 22: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur l’intégration continue

Et dans la pratique ? - Demo

Demo :Serveur d’intégration continu (Hudson)Outil de qualité de code (Sonar)

22Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 23: Présentation sur Maven 2 et petit retour d'expérience

23Présentation So@tLicense Creative Commons 2.0 – Share Alike

Rappels sur Maven 2

Page 24: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur Maven 2

24Présentation So@tLicense Creative Commons 2.0 – Share Alike

Un peu d’histoire…

Page 25: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur Maven 2Un peu d’histoire…

Mot Yiddish signifiant accumulator of knowledge

Né en aout 2001 avec le projet Alexandria puis utilisé pour simplifier le développement du projet Turbine (jakarta) – Framework de présentation de portail utilisé par Jetspeed 1

Constat :De nombreux projets hétérogènes (ant différents, structure fichiers, …)Une gestion des dépendances difficiles (librairies dans le SCM)

25Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 26: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur Maven 2Un peu d’histoire…

Volontés :Avoir une manière standardisée de builderAvoir une description du projetAvoir une manière simple d’éditer les informations du projetAvoir une manière simple de partager les librairies entre les différents projetsNe plus stocker les librairies dans le SCM

26Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 27: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur Maven 2Un peu d’histoire…

Maven est un Project Management Framework

Il permet de :Rendre le processus de build simpleUniformiser le processus de buildFournir des informations de projet de qualitéFournir des directives pour les best practices developmentMigrer de manière transparente à de nouvelles fonctionnalités

27Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 28: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2

28Présentation So@tLicense Creative Commons 2.0 – Share Alike

Notions

Page 29: Présentation sur Maven 2 et petit retour d'expérience

Rappels sur Maven 2Notions

Utilise la notion de projet où existent :Un ensemble de fichiers contenant du code[Des fichiers de configuration][Des licenses]Des développeurs impliqués associés à leurs rôles sur le projetLes dépendancesLes ressources (images, …)

Convention Over Configuration

29Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 30: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions - POM

POM – Project Object Model = fichier descripteur décrivant le projetHérite du super-pom

Permet de normaliser

30Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 31: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions - POM

Contient :groupId (ex : fr.soat.sample)artifactId (ex : mon-premier-module)packaging (ex : jar)versionnameurldescription

dependencypluginbuild

31Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 32: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Structure d’un projet

ex :

32Présentation So@tLicense Creative Commons 2.0 – Share Alike

=>

Page 33: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Structure d’un projet

ex 2 :

33Présentation So@tLicense Creative Commons 2.0 – Share Alike

=>

Page 34: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Gestion des dépendances

Gère les dépendances du projetGère les dépendances transitives entre projet

ex : A (sample-war.war) dépend de B (sample-jar.jar)B (sample-jar.jar) dépend de C (log4j.jar)

34Présentation So@tLicense Creative Commons 2.0 – Share Alike

=+

<groupId>fr.soat.sample.metier</groupId> <artifactId>jar-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <name>jar-sample</name>

<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies>

<groupId>fr.soat.sample</groupId><artifactId>war-sample</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>war-sample</name>

<dependencies> <dependency> <groupId>fr.soat.sample.metier</groupId> <artifactId>jar-sample</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency></dependencies>

Page 35: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Gestion de la visibilité

Existe 6 types de visibilité :Compile : (par défaut) disponible dans toutes les phasesRuntime : les dépendances de portées runtime ne sont pas nécessaires pour la compilation, uniquement pour l'exécution (ex : drivers JDBC)Provided : utilisée pour compiler l'application, mais non déployée (ex : librairies présentes dans le classpath d’un serveur d’application)Test : uniquement nécessaires pour compiler et exécuter les tests (par exemple Junit)System : similaire au scope Provided mais où le jar est spécifié explicitement (ie. Son chemin dans le système de fichiers)Import : utilisé uniquement dans le cas d’une dépendance de type pom ans la section <dependencyManagement>

35Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 36: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Gestion de la visibilité

ex :

36Présentation So@tLicense Creative Commons 2.0 – Share Alike

<groupId>fr.soat.sample</groupId><artifactId>war-sample</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>war-sample</name>

<dependencies> <dependency> <groupId>fr.soat.sample.metier</groupId> <artifactId>jar-sample</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>

<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>

</dependencies>

Page 37: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Modules et Héritage

Permet de gérer des modules (référence à un autre projet maven, c’est à dire une référence à un autre POM)

Permet de gérer des héritages (référence à un projet père pour bénéficier des caractéristique de son POM)

37Présentation So@tLicense Creative Commons 2.0 – Share Alike

<groupId>fr.soat.sample</groupId><artifactId>project-sample</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging>…<modules> <module>jar-sample</module> <module>war-sample</module></modules>

<artifactId>war-sample</artifactId><packaging>war</packaging><name>war-sample</name>

<parent> <groupId>fr.soat.sample</groupId> <artifactId>project-sample</artifactId> <version>0.0.1-SNAPSHOT</version></parent>

<artifactId>jar-sample</artifactId><name>jar-sample</name>

<parent> <groupId>fr.soat.sample</groupId> <artifactId>project-sample</artifactId> <version>0.0.1-SNAPSHOT</version></parent>

Page 38: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Repository

Repository global :Un/des repositories globaux (ex : http://repo1.maven.org/maven2/ ) contiennent les dépendances officielles et sont utilisés pour construire (par téléchargement) le repository local

Repository local :(par défaut $HOME/.m2/repository) contient des dépendances officielles et courantes et est utilisé par les projets pour chercher les dépendances. Si elles ne sont pas trouvées dans le repository local, elles sont automatiquement téléchargées à partir du/des repositories globaux

38Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 39: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Repository

Structure des repositories :

39Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 40: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Cycle de vie

Consiste en une série de phases où chaque phase peut réaliser une ou plusieurs actions (ou goals) liée à la phase (ex : la phase de compilation invoque un ensemble de goal de compilation)Possibilité d’invoquer un goal directement

ex : mvn release:prepare

40Présentation So@tLicense Creative Commons 2.0 – Share Alike

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <id>stop-tomcat</id> <phase>generate-test-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <exec dir="/home/dev/sps-tomcat/bin" executable="sh"> <arg line="shutdown.sh" /> </exec> </tasks> </configuration> </execution> </executions></plugin>

Page 41: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Profils

Possibilité de définir ses profils (ex : dev, initdb, dev-bdd) :

Permet de se dé-corréler d’une couche non utile aux développements courants (allégement de la compilation, tests propres au développement courant, ...)Permet de tester par rapport à son environnement

ex :mvn install -Pdev

41Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 42: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Notions – Configuration

${MAVEN_HOME}/confsettings.xml

Proxy internet,Path du repository local,Mirroirs,Profils,…

${HOME}/.m2settings.xml

Mirroirs,Profils,Droits

42Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 43: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2

43Présentation So@tLicense Creative Commons 2.0 – Share Alike

Dans la vraie vie…

Page 44: Présentation sur Maven 2 et petit retour d'expérience

Rappel sur Maven 2Dans la vraie vie…

Demo :Repo proxy (Nexus)Plugins mavenIntégration eclipse (m2eclipse)

44Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 45: Présentation sur Maven 2 et petit retour d'expérience

45Présentation So@tLicense Creative Commons 2.0 – Share Alike

Exemple de mise en œuvre

Page 46: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Contexte (1/2)

But : mise en place d’outils pour automatiser l’exécution de tests fonctionnelsEtat des lieux :

Contient :4 webapps

Jetspeed2 portletsWebservices

1 bdd postgreSQLSCM = SVNProcédure de livrable :

L’équipe de production récupérait les sources sur le serveur cible et exécutait les commandes :

mvn jetspeed:mvn –PdeployCopiait le war des webservices

17 TUs…

46Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 47: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Contexte (2/2)

Outils :IntelliJ, Eclipse, NetbeansTeamCity :

mvn clean installArtifactorySVNMaven 2 mais peu de connaissances (2-3 personnes sur 10)

Procédure de déploiement sur le poste du développeur

mvn jetspeed:mvn –Pdeploy (bdd, déploiement, …)

47Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 48: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Maitriser le build

Maitriser le buildGénérer des wars déployables via un mvn install (ie. s’abstraire du processus Jetspeed (au moins en parti)Générer un livrable : utilisation du plugin Assembly et externalisation des fichiers de configuration hors des war/jarMettre en place les bonnes pratiques Maven

SNAPSHOTProfileScope/classifierAlléger les POM des informations inutilesDéfinir un projet parent contenant toutes les informations

48Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 49: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Accélérer le développement

Utilisation de JRebel sur le poste des développeurs

49Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 50: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – le processus de développement

Mettre en place un environnement dont les données sont maitrisées sur lesquels un déploiement est fait quotidiennement et automatiquement via l’utilisation du plugin Cargo

Dev-Int

Mettre en place un environnement dont les données sont maitrisées sur lesquels un déploiement est fait quotidiennement et automatiquement via l’utilisation du plugin Cargo et sur lequel un ensemble de test fonctionnellement est effectué via le framework de test Selenium

TU-Dev-Int

50Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 51: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – le processus de

développement

51Présentation So@tLicense Creative Commons 2.0 – Share Alike

Processus de développement

Poste développeur

développement

TU NOK

SVN

commitTU OK

TeamCity

Compilation + TU

Compilation ou TU NOK

Compilation + TU +

Déploiement Auto Dev-integ

Compilation + TU + TF +Déploiement

Auto TU-Dev-integ

Compilation ou TU ou TF NOK

Compilation ou TU ou TF NOK

TU = tests unitairesTF = tests fonctionnels

Page 52: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Le processus de

livraison

Mettre en place un environnement le plus proche possible de l’environnement cible permettant de tester le livrable via les scripts utilisés par la production

Définir le rôle de l’environnement sur lequel les tests de QA sont effectués

52Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 53: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Le processus de

livraison

53Présentation So@tLicense Creative Commons 2.0 – Share Alike

Processus de livraison

Poste Livreur (job Serveur CI)

Pré-Intégration Intégration

Développeurs

ProductionLivrable

Environnement installéDéploiement

CorrectionTF NOK

Livraison

Environnement Installé

TF = tests fonctionnels

Déploiement si TF OK sur env. dev-intégration

Tests MOA NOK

Page 54: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Les tests

fonctionnels

Utilisation de Selenium

Développement d’un framework s’appuyant sur Selenium pour rendre indépendant les scénarii de test de l’interface web (API offerte sous forme de DSL)

54Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 55: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Les pratiques de

codage

Mise en place de Sonar

Mais…Mal configuréMal utilisé par le managementMal compris par le management

Cette culture doit être partagée!

55Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 56: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Plan d’action – Le livrable

Utilisation du plugin Release pour gérer le processus de livraison (création tags, déploiement sur le Remote Proxy, …)

56Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 57: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Focus – Retour sur les fichiers de

configuration

Ici, tous les fichiers de configuration se trouvent dans le classpath serveur au runtime :

Permet :Gestion de la configuration par la productionNe pas avoir à « dé-warer » ou « dé-jarer »

Problématique :Ne pas avoir de doublons

Solution appliquée :1 module pour la configurationUtilisation du resource/filter de MavenUtilisation du classifier test

57Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 58: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Focus – Retour sur le jeux de

données

Ici, jeux de données dépendant de la base de données

Problématique : Séparation entre le schéma et les données de tests

Solution retenue :Dump bdd?Fichier sql à maintenir?Injecteur Java?

Doit être pensé dès le départ et la problématique doit être partagée!

58Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 59: Présentation sur Maven 2 et petit retour d'expérience

Exemple de mise en œuvre Focus – Retour sur le livrable

Utilisation du plugin assemblyUtilisation d’1 moduleUtilisation de la gestion de la transitivité de Maven pour gérer le livrable

59Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 60: Présentation sur Maven 2 et petit retour d'expérience

60Présentation So@tLicense Creative Commons 2.0 – Share Alike

Bonnes pratiques Maven

Page 61: Présentation sur Maven 2 et petit retour d'expérience

Bonnes pratiques MavenEn vrac…

SNAPSHOTUtiliser dependencyManagementUtiliser les plugins et déclarer leur versionUtiliser pluginManagementUtiliser les modules et les héritagesUtiliser le même numéro de version dans tout le projetNe pas utiliser Maven pour ce qu’il n’est pas prévu

Utiliser un repository manager (Nexus, Archiva, Artifactory, …)

Ne pas skipper les tests unitairesComprendre son fonctionnement

61Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 62: Présentation sur Maven 2 et petit retour d'expérience

Bonnes pratiques MavenEn général…

Utiliser un SCM (SVN, CVS, Git, …)Utiliser des outils de qualité de code (Sonar, Findbugs, Pmd, Checkstyle, Cobertura, …), les configurer, regarder l’évolution et améliorer son codeUtiliser le plugin Release quand cela est possible

Utiliser un serveur d’intégration continue (Hudson, Jenkins, Continuum, Bamboo, CruiseControl, …)

Faire prendre conscience à chacun de l’importance des processus

62Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 63: Présentation sur Maven 2 et petit retour d'expérience

Bonnes pratiques MavenFocus

Plugin ReleasePhase prepare :

Vérification du code présentVérification des SNAPSHOTSPrompt de l’utilisateur sur les versionsVérifie la validité du projet Tags le projet sur le SCM à la version indiquéeItère le numéro de version

Phase perform :Checkout du code sourceGénération du livrable, de la documentation et du code source et upload sur le remote proxy maven

63Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 64: Présentation sur Maven 2 et petit retour d'expérience

Bonnes pratiques MavenFocus

Commandes-pl-amd-am-N

-T

64Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 65: Présentation sur Maven 2 et petit retour d'expérience

Bonnes pratiques MavenFocus

Plugin Versionsmvn versions:set –DnewVersion=xxxmvn versions:commitmvn versions:rollback

65Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 66: Présentation sur Maven 2 et petit retour d'expérience

66Présentation So@tLicense Creative Commons 2.0 – Share Alike

Pour aller plus loin…

Page 67: Présentation sur Maven 2 et petit retour d'expérience

Pour aller plus loin…

[Web] Site officiel de maven http://maven.apache.org/

[Livre] Apache Maven – N. De loof, A. Héritier [Pearson]

[Web] BetterBuildsWithMaven – V. Massol, J. Van Zyl, B. Porter, J. Casey, C. Sanchez http://repo.exist.com/dist/maestro/1.7.0/BetterBuildsWithMaven.pdf [Web] Maven the complete reference - T. O'Brien, J. Casey, B. Fox, J. Van Zyl, M. Moser, E. Redmond, L. Shatzer http://www.sonatype.com/books/mvnref-book/reference/public-book.html

[Web] Maven : The definive guide - T. O'Brien, J. Casey, B. Fox, J. Van Zyl, E. Redmond, L. Shatzer, B. Snyder, E. Hugonnet, E. Alliaume http://www.maven-definitive-guide.fr/

[Vidéo] Vers des exigences exécutables – O. Billard, A. Bonnefoy http://www.beta.parleys.com/#id=1880&sl=1&st=5 [Vidéo] Intégration Continue – enjeux, outils et bénéfices – P. Ensarguet, T. Carré http://www.beta.parleys.com/#id=1863&sl=1&st=5 [Vidéo] Sonar – O. Gaudin http://www.beta.parleys.com/#id=678&sl=1&st=5

[Vidéo] Les frameworks open source – R. Pelisse, F. Le Droff http://www.beta.parleys.com/#id=625&sl=1&st=5

67Présentation So@tLicense Creative Commons 2.0 – Share Alike

Page 68: Présentation sur Maven 2 et petit retour d'expérience

68Présentation So@tLicense Creative Commons 2.0 – Share Alike

Question ?