SlideShare une entreprise Scribd logo
Soirée Technique : L’intégration continue avec Maven 2 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
Agenda Rappels sur l’intégration continue Enjeux de l’intégration continue Outils pour sa mise en œuvre Rappels sur Maven 2 Un peu d’histoire… Notions Dans la vrai vie… Exemple de mise en œuvre Bonnes pratiques Maven Présentation So@t License Creative Commons 2.0 – Share Alike
Présentation So@t License Creative Commons 2.0 – Share Alike Rappels sur l’intégration continue
Rappels sur l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike Enjeux de l’intégration continue
Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike 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 Point cruciaux : Traçabilité de la vie du projet Reproductivité de l’environnement de compilation Reproductivité de l’environnement technique Présentation So@t License Creative Commons 2.0 – Share Alike Socle technique Environnement  de build Intégration continue
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é! Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike 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égration Evè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ésultats Enregistrement des résultats Génération des rapports Notifications des résultats Publication de l’artéfact 4
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, …)  Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike
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. Présentation So@t License Creative Commons 2.0 – Share Alike
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équentes L’idée principale :  Réduire au minimum l’effort d’intégration de l’application sans altérer le processus de développement logiciel Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike 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 dans  l’espace   p0 p1 pj pic dans le  temps t1 ti t0
Rappels sur l’intégration continue Enjeux de l’intégration continue 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… Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike Et dans la pratique ?
Rappels sur l’intégration continue Et dans la pratique ? Utiliser un outils de build Utiliser un SCM Utiliser un framework de tests unitaires Utiliser un serveur d’intégration continue Utiliser un framework de tests fonctionnels Utiliser 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 Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur l’intégration continue Et dans la pratique ? - Outils (1/2) Outils de build Ant Maven SCM SVN CVS ClearCase GIT Serveur d’intégration continue Hudson Continuum Bamboo TeamCity CruiseControl Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur l’intégration continue  Et dans la pratique ? - Outils (2/2) Framework de tests unitaires Junit TestNG Mockito Framework de tests fonctionnels Fitness Selenium + Tellurium Outils de suivi de faits techniques Jira Communiquer… intelligemment… Wiki Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur l’intégration continue Et dans la pratique ? – En quelques mots… Présentation So@t License Creative Commons 2.0 – Share Alike Accueil d’un nouveau développeur Enregistrement des modifications Compilation, tests Analyses de code Détection du besoin d’intégration Chargement de modifications Production de code Outil de compilation Intégration continue Gestion de configuration Gestion de dépendances Compilations privées pom.xml
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ôt Commiter du code qui marche fréquemment Exécuter des builds privés Développer de petites tâches Commenter chaque commit Valider le build par des tests (unitaires et fonctionnels) qui passent à 100% Pas de test = pas d’erreur, les tests doivent être pertinents Prendre en compte la couverture de test Intégrer après chaque commit Temps de build < 10 min Distinguer 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 Présentation So@t License Creative Commons 2.0 – Share Alike
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 maximum L’environnement de build doit être propre Privilégier le checkout, au moins pour l’intégration complète quotidienne Nettoyer le dépôt local de Maven Selon les cas, intégrer sur différentes plateformes Dans certains l’utilisation d’un miroir du SCM peut-être utile Anti-patterns : Absence de référentiel de sources Intégration sur le poste de développement Utilisation de scripts de build différents entre le développement et l’intégration Présentation So@t License Creative Commons 2.0 – Share Alike
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 projet Se fixer des objectifs raisonnables Automatiser les tâches de relecture Anti-patterns : Les objectifs trop ambitieux peuvent décourager Sélectionner les règles Pré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 confiance De 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 Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur l’intégration continue Et dans la pratique ? - Demo  Demo : Serveur d’intégration continu (Hudson) Outil de qualité de code (Sonar) Présentation So@t License Creative Commons 2.0 – Share Alike
Présentation So@t License Creative Commons 2.0 – Share Alike Rappels sur Maven 2
Rappels sur Maven 2 Présentation So@t License Creative Commons 2.0 – Share Alike Un peu d’histoire…
Rappels sur Maven 2 Un 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) Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur Maven 2 Un peu d’histoire… Volontés : Avoir une manière standardisée de builder Avoir une description du projet Avoir une manière simple d’éditer les informations du projet Avoir une manière simple de partager les librairies entre les différents projets Ne plus stocker les librairies dans le SCM Présentation So@t License Creative Commons 2.0 – Share Alike
Rappels sur Maven 2 Un peu d’histoire… Maven est un  Project Management Framework Il permet de : Rendre le processus de build simple Uniformiser le processus de build Fournir des informations de projet de qualité Fournir des directives pour les  best practices development Migrer de manière transparente à de nouvelles fonctionnalités Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Présentation So@t License Creative Commons 2.0 – Share Alike Notions
Rappels sur Maven 2 Notions 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 projet Les dépendances Les ressources (images, …) Convention Over Configuration Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions - POM POM –  Project Object Model  = fichier descripteur décrivant le projet Hérite du super-pom Permet de normaliser Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions - POM Contient : groupId (ex : fr.soat.sample) artifactId (ex : mon-premier-module) packaging (ex : jar) version name url description dependency plugin build Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions – Structure d’un projet ex : Présentation So@t License Creative Commons 2.0 – Share Alike =>
Rappel sur Maven 2 Notions – Structure d’un projet ex 2 : Présentation So@t License Creative Commons 2.0 – Share Alike =>
Rappel sur Maven 2 Notions – Gestion des dépendances Gère les dépendances du projet Gè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) Présentation So@t License 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>
Rappel sur Maven 2 Notions – Gestion de la visibilité Existe 6 types de visibilité : Compile  : (par défaut) disponible dans toutes les phases Runtime  : 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> Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions – Gestion de la visibilité ex : Présentation So@t License 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>
Rappel sur Maven 2 Notions – 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) Présentation So@t License 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>
Rappel sur Maven 2 Notions – 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 Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions – Repository Structure des repositories : Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions – 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 Présentation So@t License 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= &quot;/home/dev/sps-tomcat/bin&quot; executable=&quot;sh&quot;> <arg line= &quot;shutdown.sh&quot; /> </exec> </tasks> </configuration> </execution> </executions> </plugin>
Rappel sur Maven 2 Notions – 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 Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Notions – Configuration ${MAVEN_HOME}/conf settings.xml Proxy internet, Path du repository local, Mirroirs, Profils, … ${HOME}/.m2 settings.xml Mirroirs, Profils, Droits Présentation So@t License Creative Commons 2.0 – Share Alike
Rappel sur Maven 2 Présentation So@t License Creative Commons 2.0 – Share Alike Dans la vraie vie…
Rappel sur Maven 2 Dans la vraie vie… Demo : Repo proxy (Nexus) Plugins maven Intégration eclipse (m2eclipse) Présentation So@t License Creative Commons 2.0 – Share Alike
Présentation So@t License Creative Commons 2.0 – Share Alike Exemple de mise en œuvre
Exemple de mise en œuvre  Contexte (1/2) But : mise en place d’outils pour automatiser l’exécution de tests fonctionnels Etat des lieux : Contient : 4 webapps Jetspeed 2 portlets Webservices 1 bdd postgreSQL SCM = SVN Procédure de livrable : L’équipe de production récupérait les sources sur le serveur cible et exécutait les commandes : mvn jetspeed:mvn –Pdeploy Copiait le war des webservices 17 TUs… Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Contexte (2/2) Outils : IntelliJ, Eclipse, Netbeans TeamCity :  mvn clean install Artifactory SVN Maven 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, …) Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Plan d’action – Maitriser le build Maitriser le build Gé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/jar Mettre en place les bonnes pratiques Maven  SNAPSHOT Profile Scope/classifier Alléger les POM des informations inutiles Définir un projet parent contenant toutes les informations Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Plan d’action – Accélérer le développement Utilisation de JRebel sur le poste des développeurs Présentation So@t License Creative Commons 2.0 – Share Alike
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 Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Plan d’action – le processus de développement Présentation So@t License Creative Commons 2.0 – Share Alike Processus de  développement développement TU NOK commit TU OK 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 unitaires TF = tests fonctionnels Poste développeur SVN TeamCity
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  Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Plan d’action – Le processus de livraison Présentation So@t License Creative Commons 2.0 – Share Alike Processus de livraison Production Livrable Environnement  installé Déploiement Correction TF NOK Livraison Environnement  Installé TF = tests fonctionnels Déploiement si TF OK sur env. dev-intégration Tests MOA NOK Poste Livreur (job Serveur CI) Pré-Intégration Intégration Développeurs
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) Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Plan d’action – Les pratiques de codage Mise en place de Sonar Mais… Mal configuré Mal utilisé par le management Mal compris par le management Cette culture doit être partagée! Présentation So@t License Creative Commons 2.0 – Share Alike
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, …) Présentation So@t License Creative Commons 2.0 – Share Alike
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 production Ne pas avoir à « dé-warer » ou « dé-jarer » Problématique : Ne pas avoir de doublons Solution appliquée : 1 module pour la configuration Utilisation du resource/filter de Maven Utilisation du classifier test Présentation So@t License Creative Commons 2.0 – Share Alike
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! Présentation So@t License Creative Commons 2.0 – Share Alike
Exemple de mise en œuvre  Focus – Retour sur le livrable Utilisation du plugin assembly Utilisation d’1 module Utilisation de la gestion de la transitivité de Maven pour gérer le livrable Présentation So@t License Creative Commons 2.0 – Share Alike
Présentation So@t License Creative Commons 2.0 – Share Alike Bonnes pratiques Maven
Bonnes pratiques Maven En vrac… SNAPSHOT Utiliser dependencyManagement Utiliser les plugins et déclarer leur version Utiliser pluginManagement Utiliser les modules et les héritages Utiliser le même numéro de version dans tout le projet Ne pas utiliser Maven pour ce qu’il n’est pas prévu  Utiliser un repository manager (Nexus, Archiva, Artifactory, …) Ne pas skipper les tests unitaires Comprendre son fonctionnement  Présentation So@t License Creative Commons 2.0 – Share Alike
Bonnes pratiques Maven En 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 code Utiliser 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 Présentation So@t License Creative Commons 2.0 – Share Alike
Bonnes pratiques Maven Focus Plugin Release Phase prepare : Vérification du code présent Vérification des SNAPSHOTS Prompt de l’utilisateur sur les versions Vérifie la validité du projet  Tags le projet sur le SCM à la version indiquée Itère le numéro de version Phase perform : Checkout du code source Génération du livrable, de la documentation et du code source et upload sur le remote proxy maven Présentation So@t License Creative Commons 2.0 – Share Alike
Bonnes pratiques Maven Focus Commandes -pl -amd -am -N -T Présentation So@t License Creative Commons 2.0 – Share Alike
Bonnes pratiques Maven Focus Plugin Versions mvn versions:set –DnewVersion=xxx mvn versions:commit mvn versions:rollback Présentation So@t License Creative Commons 2.0 – Share Alike
Présentation So@t License Creative Commons 2.0 – Share Alike Pour aller plus loin…
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   Présentation So@t License Creative Commons 2.0 – Share Alike
Présentation So@t License Creative Commons 2.0 – Share Alike Question ?

Contenu connexe

Tendances

Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
Arnaud Héritier
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
Arnaud Héritier
 
Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
teejug
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
Celinio Fernandes
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
Johan Moreau
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
Eric SIBER
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Emmanuel Hugonnet
 
Présentation1
Présentation1Présentation1
Présentation1
Boulkenafet samir
 
Maven
MavenMaven
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)
Celinio Fernandes
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
Rachid NID SAID
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
SmartnSkilled
 
Maven
MavenMaven
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
vincent aniort
 
Formation gwt
Formation gwtFormation gwt
Formation gwt
Francois ANDRE
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
Stéphane Traumat
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery Avancé
Zenika
 

Tendances (20)

Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Présentation1
Présentation1Présentation1
Présentation1
 
Maven
MavenMaven
Maven
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 
Maven
MavenMaven
Maven
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
 
Formation gwt
Formation gwtFormation gwt
Formation gwt
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery Avancé
 

En vedette

Introduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuéeIntroduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuée
Khanh Maudoux
 
Comment mieux vivre avec ses tests d'acceptance
Comment mieux vivre avec ses tests d'acceptanceComment mieux vivre avec ses tests d'acceptance
Comment mieux vivre avec ses tests d'acceptance
Khanh Maudoux
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
Khanh Maudoux
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
ENSET, Université Hassan II Casablanca
 
QA Fest 2014. Анна Гаврилюк. Cool as сucumber
QA Fest 2014. Анна Гаврилюк. Cool as сucumberQA Fest 2014. Анна Гаврилюк. Cool as сucumber
QA Fest 2014. Анна Гаврилюк. Cool as сucumber
QAFest
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
Kalilou DIABY
 
Telecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdfTelecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdf
webreaker
 
Pizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberPizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumber
Hervé Leclerc
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
Mike Desjardins
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
laurent bristiel
 
Méthodes agiles & Scrum
Méthodes agiles & ScrumMéthodes agiles & Scrum
Méthodes agiles & Scrum
Valentin Bourgoin
 
Getting Started with Angular 2
Getting Started with Angular 2Getting Started with Angular 2
Getting Started with Angular 2
FITC
 
Tests ihm automatises avec selenium
Tests ihm automatises avec seleniumTests ihm automatises avec selenium
Tests ihm automatises avec selenium
sojavawest
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
Nicolas Perriault
 
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux
Alphorm
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautés
Alphorm
 
alphorm.com - Formation UML
alphorm.com - Formation UMLalphorm.com - Formation UML
alphorm.com - Formation UML
Alphorm
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
Vincent Caillierez
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
Antoine Rey
 

En vedette (20)

Introduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuéeIntroduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuée
 
Comment mieux vivre avec ses tests d'acceptance
Comment mieux vivre avec ses tests d'acceptanceComment mieux vivre avec ses tests d'acceptance
Comment mieux vivre avec ses tests d'acceptance
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
QA Fest 2014. Анна Гаврилюк. Cool as сucumber
QA Fest 2014. Анна Гаврилюк. Cool as сucumberQA Fest 2014. Анна Гаврилюк. Cool as сucumber
QA Fest 2014. Анна Гаврилюк. Cool as сucumber
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Telecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdfTelecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdf
 
Pizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberPizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumber
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
 
Méthodes agiles & Scrum
Méthodes agiles & ScrumMéthodes agiles & Scrum
Méthodes agiles & Scrum
 
Getting Started with Angular 2
Getting Started with Angular 2Getting Started with Angular 2
Getting Started with Angular 2
 
Tests ihm automatises avec selenium
Tests ihm automatises avec seleniumTests ihm automatises avec selenium
Tests ihm automatises avec selenium
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
 
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautés
 
alphorm.com - Formation UML
alphorm.com - Formation UMLalphorm.com - Formation UML
alphorm.com - Formation UML
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 

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

At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
Emmanuel Hugonnet
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
Emmanuel Hugonnet
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
ALTER WAY
 
Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...
Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...
Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...
vlabatut
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
laurent_opnworks
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
Nicolas wallerand
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
PimpMySharePoint
 
Integration continue et déploiement automatisé
Integration continue et déploiement automatiséIntegration continue et déploiement automatisé
Integration continue et déploiement automatisé
Jérémie Campari
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
PimpMySharePoint
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous Delivery
Zenika
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
PimpMySharePoint
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
Klee Group
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
Laurent Broudoux
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Xavier Callens
 
Formation devops par la pratique
Formation devops par la pratiqueFormation devops par la pratique
Formation devops par la pratique
Khaled Ben Driss
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
Agile Tour 2009 Québec
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Hamida Rebai Trabelsi
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
Frédéric Sagez
 

Similaire à Présentation sur Maven 2 et petit retour d'expérience (20)

At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...
Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...
Techdays 2011 : Développez en Java avec la plateforme Team Foundation Server ...
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 
Integration continue et déploiement automatisé
Integration continue et déploiement automatiséIntegration continue et déploiement automatisé
Integration continue et déploiement automatisé
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous Delivery
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
 
Formation devops par la pratique
Formation devops par la pratiqueFormation devops par la pratique
Formation devops par la pratique
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdf
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 

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

  • 1. Soirée Technique : L’intégration continue avec Maven 2 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
  • 2. Agenda Rappels sur l’intégration continue Enjeux de l’intégration continue Outils pour sa mise en œuvre Rappels sur Maven 2 Un peu d’histoire… Notions Dans la vrai vie… Exemple de mise en œuvre Bonnes pratiques Maven Présentation So@t License Creative Commons 2.0 – Share Alike
  • 3. Présentation So@t License Creative Commons 2.0 – Share Alike Rappels sur l’intégration continue
  • 4. Rappels sur l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike Enjeux de l’intégration continue
  • 5. Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike 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
  • 6. Rappels sur l’intégration continue Enjeux de l’intégration continue Point cruciaux : Traçabilité de la vie du projet Reproductivité de l’environnement de compilation Reproductivité de l’environnement technique Présentation So@t License Creative Commons 2.0 – Share Alike Socle technique Environnement de build Intégration continue
  • 7. 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é! Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike
  • 8. Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike 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égration Evè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ésultats Enregistrement des résultats Génération des rapports Notifications des résultats Publication de l’artéfact 4
  • 9. 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, …) Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike
  • 10. 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. Présentation So@t License Creative Commons 2.0 – Share Alike
  • 11. 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équentes L’idée principale : Réduire au minimum l’effort d’intégration de l’application sans altérer le processus de développement logiciel Présentation So@t License Creative Commons 2.0 – Share Alike
  • 12. Rappels sur l’intégration continue Enjeux de l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike 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 dans l’espace p0 p1 pj pic dans le temps t1 ti t0
  • 13. Rappels sur l’intégration continue Enjeux de l’intégration continue 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… Présentation So@t License Creative Commons 2.0 – Share Alike
  • 14. Rappels sur l’intégration continue Présentation So@t License Creative Commons 2.0 – Share Alike Et dans la pratique ?
  • 15. Rappels sur l’intégration continue Et dans la pratique ? Utiliser un outils de build Utiliser un SCM Utiliser un framework de tests unitaires Utiliser un serveur d’intégration continue Utiliser un framework de tests fonctionnels Utiliser 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 16. Rappels sur l’intégration continue Et dans la pratique ? - Outils (1/2) Outils de build Ant Maven SCM SVN CVS ClearCase GIT Serveur d’intégration continue Hudson Continuum Bamboo TeamCity CruiseControl Présentation So@t License Creative Commons 2.0 – Share Alike
  • 17. Rappels sur l’intégration continue Et dans la pratique ? - Outils (2/2) Framework de tests unitaires Junit TestNG Mockito Framework de tests fonctionnels Fitness Selenium + Tellurium Outils de suivi de faits techniques Jira Communiquer… intelligemment… Wiki Présentation So@t License Creative Commons 2.0 – Share Alike
  • 18. Rappels sur l’intégration continue Et dans la pratique ? – En quelques mots… Présentation So@t License Creative Commons 2.0 – Share Alike Accueil d’un nouveau développeur Enregistrement des modifications Compilation, tests Analyses de code Détection du besoin d’intégration Chargement de modifications Production de code Outil de compilation Intégration continue Gestion de configuration Gestion de dépendances Compilations privées pom.xml
  • 19. 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ôt Commiter du code qui marche fréquemment Exécuter des builds privés Développer de petites tâches Commenter chaque commit Valider le build par des tests (unitaires et fonctionnels) qui passent à 100% Pas de test = pas d’erreur, les tests doivent être pertinents Prendre en compte la couverture de test Intégrer après chaque commit Temps de build < 10 min Distinguer 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 20. 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 maximum L’environnement de build doit être propre Privilégier le checkout, au moins pour l’intégration complète quotidienne Nettoyer le dépôt local de Maven Selon les cas, intégrer sur différentes plateformes Dans certains l’utilisation d’un miroir du SCM peut-être utile Anti-patterns : Absence de référentiel de sources Intégration sur le poste de développement Utilisation de scripts de build différents entre le développement et l’intégration Présentation So@t License Creative Commons 2.0 – Share Alike
  • 21. 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 projet Se fixer des objectifs raisonnables Automatiser les tâches de relecture Anti-patterns : Les objectifs trop ambitieux peuvent décourager Sélectionner les règles Pré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 confiance De 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 22. Rappel sur l’intégration continue Et dans la pratique ? - Demo Demo : Serveur d’intégration continu (Hudson) Outil de qualité de code (Sonar) Présentation So@t License Creative Commons 2.0 – Share Alike
  • 23. Présentation So@t License Creative Commons 2.0 – Share Alike Rappels sur Maven 2
  • 24. Rappels sur Maven 2 Présentation So@t License Creative Commons 2.0 – Share Alike Un peu d’histoire…
  • 25. Rappels sur Maven 2 Un 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) Présentation So@t License Creative Commons 2.0 – Share Alike
  • 26. Rappels sur Maven 2 Un peu d’histoire… Volontés : Avoir une manière standardisée de builder Avoir une description du projet Avoir une manière simple d’éditer les informations du projet Avoir une manière simple de partager les librairies entre les différents projets Ne plus stocker les librairies dans le SCM Présentation So@t License Creative Commons 2.0 – Share Alike
  • 27. Rappels sur Maven 2 Un peu d’histoire… Maven est un Project Management Framework Il permet de : Rendre le processus de build simple Uniformiser le processus de build Fournir des informations de projet de qualité Fournir des directives pour les best practices development Migrer de manière transparente à de nouvelles fonctionnalités Présentation So@t License Creative Commons 2.0 – Share Alike
  • 28. Rappel sur Maven 2 Présentation So@t License Creative Commons 2.0 – Share Alike Notions
  • 29. Rappels sur Maven 2 Notions 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 projet Les dépendances Les ressources (images, …) Convention Over Configuration Présentation So@t License Creative Commons 2.0 – Share Alike
  • 30. Rappel sur Maven 2 Notions - POM POM – Project Object Model = fichier descripteur décrivant le projet Hérite du super-pom Permet de normaliser Présentation So@t License Creative Commons 2.0 – Share Alike
  • 31. Rappel sur Maven 2 Notions - POM Contient : groupId (ex : fr.soat.sample) artifactId (ex : mon-premier-module) packaging (ex : jar) version name url description dependency plugin build Présentation So@t License Creative Commons 2.0 – Share Alike
  • 32. Rappel sur Maven 2 Notions – Structure d’un projet ex : Présentation So@t License Creative Commons 2.0 – Share Alike =>
  • 33. Rappel sur Maven 2 Notions – Structure d’un projet ex 2 : Présentation So@t License Creative Commons 2.0 – Share Alike =>
  • 34. Rappel sur Maven 2 Notions – Gestion des dépendances Gère les dépendances du projet Gè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) Présentation So@t License 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>
  • 35. Rappel sur Maven 2 Notions – Gestion de la visibilité Existe 6 types de visibilité : Compile : (par défaut) disponible dans toutes les phases Runtime : 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> Présentation So@t License Creative Commons 2.0 – Share Alike
  • 36. Rappel sur Maven 2 Notions – Gestion de la visibilité ex : Présentation So@t License 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>
  • 37. Rappel sur Maven 2 Notions – 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) Présentation So@t License 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>
  • 38. Rappel sur Maven 2 Notions – 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 39. Rappel sur Maven 2 Notions – Repository Structure des repositories : Présentation So@t License Creative Commons 2.0 – Share Alike
  • 40. Rappel sur Maven 2 Notions – 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 Présentation So@t License 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= &quot;/home/dev/sps-tomcat/bin&quot; executable=&quot;sh&quot;> <arg line= &quot;shutdown.sh&quot; /> </exec> </tasks> </configuration> </execution> </executions> </plugin>
  • 41. Rappel sur Maven 2 Notions – 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 42. Rappel sur Maven 2 Notions – Configuration ${MAVEN_HOME}/conf settings.xml Proxy internet, Path du repository local, Mirroirs, Profils, … ${HOME}/.m2 settings.xml Mirroirs, Profils, Droits Présentation So@t License Creative Commons 2.0 – Share Alike
  • 43. Rappel sur Maven 2 Présentation So@t License Creative Commons 2.0 – Share Alike Dans la vraie vie…
  • 44. Rappel sur Maven 2 Dans la vraie vie… Demo : Repo proxy (Nexus) Plugins maven Intégration eclipse (m2eclipse) Présentation So@t License Creative Commons 2.0 – Share Alike
  • 45. Présentation So@t License Creative Commons 2.0 – Share Alike Exemple de mise en œuvre
  • 46. Exemple de mise en œuvre Contexte (1/2) But : mise en place d’outils pour automatiser l’exécution de tests fonctionnels Etat des lieux : Contient : 4 webapps Jetspeed 2 portlets Webservices 1 bdd postgreSQL SCM = SVN Procédure de livrable : L’équipe de production récupérait les sources sur le serveur cible et exécutait les commandes : mvn jetspeed:mvn –Pdeploy Copiait le war des webservices 17 TUs… Présentation So@t License Creative Commons 2.0 – Share Alike
  • 47. Exemple de mise en œuvre Contexte (2/2) Outils : IntelliJ, Eclipse, Netbeans TeamCity : mvn clean install Artifactory SVN Maven 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, …) Présentation So@t License Creative Commons 2.0 – Share Alike
  • 48. Exemple de mise en œuvre Plan d’action – Maitriser le build Maitriser le build Gé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/jar Mettre en place les bonnes pratiques Maven SNAPSHOT Profile Scope/classifier Alléger les POM des informations inutiles Définir un projet parent contenant toutes les informations Présentation So@t License Creative Commons 2.0 – Share Alike
  • 49. Exemple de mise en œuvre Plan d’action – Accélérer le développement Utilisation de JRebel sur le poste des développeurs Présentation So@t License Creative Commons 2.0 – Share Alike
  • 50. 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 51. Exemple de mise en œuvre Plan d’action – le processus de développement Présentation So@t License Creative Commons 2.0 – Share Alike Processus de développement développement TU NOK commit TU OK 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 unitaires TF = tests fonctionnels Poste développeur SVN TeamCity
  • 52. 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 53. Exemple de mise en œuvre Plan d’action – Le processus de livraison Présentation So@t License Creative Commons 2.0 – Share Alike Processus de livraison Production Livrable Environnement installé Déploiement Correction TF NOK Livraison Environnement Installé TF = tests fonctionnels Déploiement si TF OK sur env. dev-intégration Tests MOA NOK Poste Livreur (job Serveur CI) Pré-Intégration Intégration Développeurs
  • 54. 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) Présentation So@t License Creative Commons 2.0 – Share Alike
  • 55. Exemple de mise en œuvre Plan d’action – Les pratiques de codage Mise en place de Sonar Mais… Mal configuré Mal utilisé par le management Mal compris par le management Cette culture doit être partagée! Présentation So@t License Creative Commons 2.0 – Share Alike
  • 56. 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, …) Présentation So@t License Creative Commons 2.0 – Share Alike
  • 57. 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 production Ne pas avoir à « dé-warer » ou « dé-jarer » Problématique : Ne pas avoir de doublons Solution appliquée : 1 module pour la configuration Utilisation du resource/filter de Maven Utilisation du classifier test Présentation So@t License Creative Commons 2.0 – Share Alike
  • 58. 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! Présentation So@t License Creative Commons 2.0 – Share Alike
  • 59. Exemple de mise en œuvre Focus – Retour sur le livrable Utilisation du plugin assembly Utilisation d’1 module Utilisation de la gestion de la transitivité de Maven pour gérer le livrable Présentation So@t License Creative Commons 2.0 – Share Alike
  • 60. Présentation So@t License Creative Commons 2.0 – Share Alike Bonnes pratiques Maven
  • 61. Bonnes pratiques Maven En vrac… SNAPSHOT Utiliser dependencyManagement Utiliser les plugins et déclarer leur version Utiliser pluginManagement Utiliser les modules et les héritages Utiliser le même numéro de version dans tout le projet Ne pas utiliser Maven pour ce qu’il n’est pas prévu Utiliser un repository manager (Nexus, Archiva, Artifactory, …) Ne pas skipper les tests unitaires Comprendre son fonctionnement Présentation So@t License Creative Commons 2.0 – Share Alike
  • 62. Bonnes pratiques Maven En 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 code Utiliser 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 63. Bonnes pratiques Maven Focus Plugin Release Phase prepare : Vérification du code présent Vérification des SNAPSHOTS Prompt de l’utilisateur sur les versions Vérifie la validité du projet Tags le projet sur le SCM à la version indiquée Itère le numéro de version Phase perform : Checkout du code source Génération du livrable, de la documentation et du code source et upload sur le remote proxy maven Présentation So@t License Creative Commons 2.0 – Share Alike
  • 64. Bonnes pratiques Maven Focus Commandes -pl -amd -am -N -T Présentation So@t License Creative Commons 2.0 – Share Alike
  • 65. Bonnes pratiques Maven Focus Plugin Versions mvn versions:set –DnewVersion=xxx mvn versions:commit mvn versions:rollback Présentation So@t License Creative Commons 2.0 – Share Alike
  • 66. Présentation So@t License Creative Commons 2.0 – Share Alike Pour aller plus loin…
  • 67. 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 Présentation So@t License Creative Commons 2.0 – Share Alike
  • 68. Présentation So@t License Creative Commons 2.0 – Share Alike Question ?

Notes de l'éditeur

  1. Quels sont les ingrédients techniques pour la réussite d’un projet? L’effet tunnel Traçabilité de la vie du projet =&gt; Livraison régulière, … Et qd il y a bcp de développeurs, qu’est ce qui consomme du tps? L’intégration =&gt; qui doit être indépendante de l’env Reproductivité de l’environnement de compilation Reproductivité de l’environnement technique
  2. 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. 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équentes l’idée principale : réduire au minimum l’effort d’intégration de l’application sans altérer le processus de développement logiciel
  3. trois composants : Un outil de construction automatisée Tel qu&apos;Ant ou Maven2, permettant aussi bien au développeur qu&apos;à l&apos;outil d&apos;intégration continue de construire tout ou partie du système. Un unique système de gestion de sources, Tel que CVS ou Subversion, contenant les sources et l&apos;historique des modifications apportées par les développeurs sur le système. A chaque mise à jour, le serveur d&apos;intégration continue charge les modifications et exécute la construction complète du système. Un serveur d&apos;intégration continue, Tels que Hudson, Bamboo, Continuum ou Cruise Control. Son rôle est de détecter les mises à jour sur le système de gestion de sources, d&apos;exécuter le cas échéant la construction du système et de notifier l&apos;équipe de développement du résultat
  4. Parler du build : pas de définition (totalement) précise…! le build peut aller de la compilation, incrémentale, à la génération d’un package en passant par la génération de fichiers de source, le lancement de tests (unitaires, d’intégration…), l’analyse du code source, la génération d’un site web et de rapports… d’une certaine manière, le build englobe l’ensemble des actions souhaitées prenant en entrée des fichiers sources pour produire un résultat souhaité. généralement, nous attendons d’un outil de build qu’il puisse automatiser et optimiser ces actions.
  5. Pas d’intégration continue sans stratégie de build totalement opérationnelle
  6. l&apos;effet psychologique sur le développeur n&apos;est pas négligeable, d&apos;autant plus si l&apos;on se trouve dans un contexte d&apos;urgence. la qualité des corrections est bien souvent délaissée au profit de la rapidité de mise en œuvre. pour éviter de telles situations, dans une démarche d&apos;intégration continue, LA tâche prioritaire lorsqu&apos;un bogue est découvert est de le corriger.
  7. import (only available in Maven 2.0.9 or later) This scope is only used on a dependency of type pom in the &lt; dependencyManagement&gt; section. It indicates that the specified POM should be replaced with the dependencies in that POM&apos;s &lt;dependencyManagement&gt; section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.