15-19 février 2009 – Paris La Défense Exemplaire Mr Anthony HERBE Formation INTEGRATION CONTINUE 15-19 février 2009 – Paris La Défense Exemplaire Mr Anthony HERBE Participant : Mr Frédéric MULLER 1 1
SOMMAIRE A propos d’Objis Introduction intégration continue Gérer les sources avec Subversion Automatiser et générer rapports avec MAVEN Intégration continue avec Cruise Control Contact www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 2
A propos d’objis Spécialiste formation JAVA depuis 2005 70% de travaux pratiques Bilan pédagogique individuel Veille technologique permanente Une approche unique de la formation Expertise, pédagogie, partage www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 3
+ de 100 tutoriaux Java/j2ee sur www.objis.com Nos tutoriaux pour vous initier Nos formatrions pour maîtriser Soa, Web Services, Spring, Struts, Hibernate, Ant, Maven, … www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 4
INTRODUCTION Qu’est ce que l’intégration continue ? Pourquoi automatiser ? Par où commencer ? Le cycle vertueux de l’intégration continue www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 5
Qu’est ce que l’intégration continue ? Technique puissante permettant dans le cadre du développement d’un logiciel en équipes de: Garder en phase les équipes de dév Limiter risques de dérive Limiter la complexité A intervalles réguliers, vous allez construire (build) et tester la dernière version de votre logiciel. Parrallèlement, chaque développeur teste et valide (commit) son travail en ajoutant son code dans un lieu de stockage unique. www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 6
Pourquoi automatiser ? Gagner du temps Vous ne faîtes pas de taches répétitives Gagner en confiance Indépendant de votre efficacité du moment Procédures répétables Diminue le besoin de documentation Pour nouveaux entrants projet, utiliser scripts ! …et + en analysant le script. www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 7
Par où commencer ? 1) Outil centralisé gestion versions code sources Lieu unique de partage Retour arrières, snapshots, branches… 2) Tests unitaires automatisés Chaque développeur 3) Scripts Coté serveur pour automatiser (Ex : crontab) 4)Outils de communication Mail, Tél, Rss… www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 8
Cycle vertueux intégration continue www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING
Gérer les sources avec SUBVERSION Introduction et problème à résoudre Concepts fondamentaux Subversion au jour le jour Branches et Tags Administration Ressources et liens utiles www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 10
Introduction Subversion est un système de contrôle de versions (ou gestionnaire de sources). Subversion autorise plusieurs personnes à travailler sur des documents communs (chacun en ayant une copie locale) Subversion permet : synchronisations entre les différentes versions de ces documents retours arrière (undo) vers versions plus anciennes, suivi modifications au cours du temps. www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 11
Problème à résoudre www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 12
Solution 1 : le lock www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 13
Solution 2 : copy-modify-merge (phase1) www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 14
Solution 2 : copy-modify-merge (phase2) www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 15
www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Architecture SVN Formation SUBVERSION www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 16
svn checkout http://monsite.com:4567/repos URL accès Repository svn checkout http://monsite.com:4567/repos svn checkout https://monsite.com:3798/repos svn checkout file:///var/svn/repos svn checkout file:///C:/var/svn/repos svn checkout svn://localhost/repository1 svn checkout ssh+svn://localhost/repository/monprojet www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 17
Arborescence www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 18
Copie de travail (svn checkout) Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 19
Subversion au jour le jour Mettre à jour votre copie de travail svn update Réaliser des modifications svn add svn delete svn copy svn move Examiner vos changements svn status svn diff Publier vos changements svn commit Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 20
Désactivation cache login/passwd Par défaut, et pour vous éviter à chaque fois de fournir login/pwd, Subversion met en cache version criptée login/pwd Répertoire %APPDATA%/Subversion/auth c:\Documents And Settings\douglas\Appli_Data Fichier 'conf' store-auth-creds = no www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 21
svnadmin create c:\svn_repository\repository1 Import d'un projet : Repository & projets Création : svnadmin create c:\svn_repository\repository1 Import d'un projet : svn —username douglas —password java import monprojet1 svn://localhost/repository1/monprojet1 -m "Import initial projet 1" Contrôle d’accès au repository conf\svnserve.conf et conf\passwd Organisation repository & projet 1 repository par projet ? www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 22
Révisions Dès qu’un fichier est modifié, c’est la révision de tous les fichiers qui s’incrémente (différence forte avec CVS) www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 23
Branches et Tags www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 24
Branches et Tags Bonne pratique : répertoires trunk, tags, branches pour chaque projet www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 25
Branche www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 26
Création d’une branche svn copy http://svn.example.com/repos/calc/trunk http://svn.exeample.com/repos/calc/branches/mabranche-calc -m « création d’une branche de trunk» www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 27
Création d’une branche de développement Changer de branche : Branches et tags Création d’un tag svn copy monprojet/trunk monprojet/tags/release-1.0-snapshot Création d’une branche de développement svn copy monprojet/trunk monprojet/branches/prepa-dev-1.1 Changer de branche : svn switch monprojet/branches/prepa-dev-1.1 Merge vers branche principale Juste pour voir : svn merge –r 11:16 –dry-run Pour de vrai : svn merge –r 11:16 Revenir à version précédente svn merge –r 16:11 www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 28
Administration Subversion svnadmin Création de repository Opérations de maintenance svnlook Examiner révisions (-r) & transactions (-t) Utilisé typiquement par hooks (pré/post commit) svnlook –revision, svnlook –t svnlook info /var/svn/repos –r 19 auteur, date , nb caractère dans log www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 29
Liens utiles SUBVERSION PDF SVN BOOK : http://svnbook.red-bean.com/ Site Subversion : http://subversion.tigris.org/ Client svn Subclipse http://subclipse.tigris.org/ plugin Eclipse 3.x Client svn windows Tortoise SVN http://tortoisesvn.tigris.org/ www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 30
Gestion de projet avec MAVEN Définition pour un développeur Définition pour un chef de projet Comparaison avec ANT Démo application multi-modules internationale www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 31
Qu’est ce que MAVEN ? Pour développeur/concepteur : outil de build Pour Chef de projet : outil de gestion de projet Maven est un outil de gestion projet caractérisé par le modèle POM (Project Object Model) Un ensemble de standards Un cycle de vie de projet Un système de gestion des dépendences Une stratégie d'exécution d'objectifs (goals) standard à chaque phase d'un projet Un ensemble de plugins implémentant des services www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 32
MAVEN : les conventions Propriétés communes à un projet Maven Installation plus facile !!! Ex : mvn install Les sources dans $HOME/src/main/java Ex : Employe.java Les tests dans $HOME/src/test Ex : EmployeTest.java Les configs dans $HOME/src/main/resources Ex : database.properties www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 33
MAVEN : les conventions Dans fichier pom.xml, vous décrivez votre projet : Quelle licence ? (<licence>) Quels développeurs ? (<developpers>) Quelles dépendences ? (<dependencies>) Quel outil gestion des sources ? (<scm>) Quel site web ? (<site>) Quels plugins (<plugins>)… Vous définissez de façon unique votre projet, en lui associant des 'coordonées' = ensemble d'identifiants : GroupId : groupe ds lequel le projet se trouve ArtifactId : nom du projet Version : version du projet www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 34
MAVEN : les conventions Coordonnées MAVEN www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 35
MAVEN : POM (Project Object Model) Gestion de dépendences Via 'coordonnées' maven de la dépendence Repositories distants Une dépendance peux se trouver sur repository distant (Ex : .jar sur autre serveur) Réutilisabilité Plugins Maven (Installation, configuration, personalisation) Portabilité Intégration avec IDE : Netbeans, Eclipse, jBuilder... Recherche simplifiée d'artifacts mvnrepository.com ou index Nexus www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 36
Comparaison ANT / MAVEN MAVEN a des conventions. Il sait déja où sont les sources, les tests, les fichiers de config... Classes créées dans target/classes Création de Jars. MAVEN est déclaratif. Tout ce que vous avez à faire est de créer un fichier pom.xml et mettre vos sources dans le répertoire par défaut. Un projet MAVEN possède un cycle vie, que vous invoquez lorsque vous lancez mvn install. Maven execute un ensemble d'instructions associées au cycle de vie du projet www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 37
Comparaison ANT / MAVEN Cibles ANT www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 38
MAVEN : plugin, goal, Mojo . Exemple avec le plugin ‘help’ Le plugin help possède 4 goal (taches) Chaque goal implémenté par un Mojo (classe Java) help:describe fournit des infos sur un plugin/goal Mvn help:describe –Dplugin=help Mvn help:describe –Dplugin=help -Ddetail Mvn help:describe –Dplugin=help -Dfull Mvn help:describe –Dplugin=help -DMojo=system –Dfull Les autres (help:active-profiles, help:effective-pom, help:effective-settings) se lancent à partir de la racine d’un projet maven (pom.xml) www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 39
Cibles Maven # mvn compile Compilation dans target/classes # mvn package Création du Jar # mvn install Création du Jar et install. Repository local $USER_HOME/.m2/repository # mvn clean Suppression du répertoire target www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 40
Maven : cycle de vie et relation Phases / Plugins www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 41
Phases Maven www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 42
Sections principales d’un pom.xml Coordonnées Maven Construction : <build> Plugins phase build : <plugins> Génération de rapports : <reporting> Stockage artifacts (livrables) : <repository> Dépendances : <dependencies> Optimisations <dependencyManagement> <pluginManagement> www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 43
Dépendances : plugin dependency mvn dependency:resolve (lister dépendances) mvn dependency:tree (arbre des dépendances) mvn dependency:tree -X (arbre : mode debug) Utile pour résolution de pb Equivalent graphique via plugin m2eclipse www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 44
Plugin Eclipse m2eclipse Création projet Maven Intégration avec serveur gestion sources Combinaison plugins Subclipse / m2eclipse Synchronisation dépendences eclipse / maven Editeur pom.xml Livre maven book Instal. dépendances/plugin (index Nexus) Graphe de dépendances www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 45
Plugin Eclipse m2eclipse : exemple graphe dépendances www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 46
Plugin Eclipse m2eclipse : l’index Nexus en action pour création projet www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 47
Exemple de projet multi modules Plusieurs équipes de développements France, Suède, Maroc, Brésil, Italie, USA Chef de projets basé en France Besoin de suivi avancement travaux (Quantité + qualité) Architecture en couche Technologies : Struts, Spring, Hibernate www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 48
Architecture Model presentation service persist www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 49
Projet Maven multi-modules Chef de projet principal : vous ! www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 50
Projet Maven multi-modules (Composition) Mvn install sur le parent entraîne aussi mvn install sur modules enfant www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 51
Focus couche persistence : les sources www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 52
Focus couche persistence : les fichiers de propriétés www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 53
Focus couche persistence : les dépendences www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 54
Focus couche persistence : relation avec parent Le module hérite de certaines propriétés du parent (ex : éépendences) . Cela allège le pom.xml du module (Héritage) www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 55
Focus couche persistence : les rapports www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 56
Focus couche persistence : code DAO www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 57
Projet Maven : compilation globale > mvn clean install www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 58
Projet Maven : génération site > mvn site www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 59
Projet Maven : rapport qualité de code (checkstyle) www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 60
Projet Maven : rapport respect normes de développement www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 61
Rapports Maven : Exemples 1/2 Ajouter dans la section <reporting> du pom.xml www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 62
Rapports Maven : Exemples 2/2 Ajouter dans la section <reporting> du pom.xml www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 63
Gestionnaire repository Maven Offre du marché : Archiva : http://archiva.apache.org Artifactory : http://jfrog.org Nexus : http://nexus.sonatype.org par équipe Maven, + moderne, nombreux plugins Critères d’évaluation Cycle de livraison Modèle de déploiement (war) Proxy/Cache de repositories (maven central, codehaus..) Règles d’inclusion / exclusion Conversion à la volée de Maven2/Maven1 integration eclipse (Uniquement index Nexus) Recherche/indexation Matrice de comparaison : http://docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Feature+Matrix www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 64
Liens utiles MAVEN Site Maven : http://maven.apache.org Maven book (pdf) : Anglais : http://www.sonatype.com/book Plugin Eclipse (m2eclipse): http://maven.apache.org/eclipse-plugin.html Tutoriel Maven Objis : http://www.objis.com/formation-java/tutoriel-formation-maven-2.html www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 65
RAPPEL définition intégration continue ? Technique puissante permettant dans le cadre du développement d’un logiciel en équipes: Garder en phase les équipes de dév. Limiter risques Limiter la complexité A intervalles réguliers, vous allez construire (build) et tester la dernière version de votre logiciel Parrallèlement, chaque développeur teste et valide (commit) son travail en ajoutant son code dans un lieu de stockage unique. www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 66
Exemple de produits serveurs intégration continue CruiseControl : http://cruisecontrol.sourceforge.net Le plus ancien. Couplage historique avec ANT + intégration repositories marché :cvs,svn,cc,vss… + plugins pour intégration Maven1, Maven2, Nant + nombreuses notifications :mail,ftp,rss,im,blog,x10 + builds parrallèles et distribués - courbe d’apprentissage & prise en main Hudson : http://hudson-ci.org + prise en main très rapide (hudson.war) + Administration full web & intuitive + intégration avec Bugzilla - faible intégration repositories (cvs/svn en natif). Ajouter plugins www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 67
Critères de comparaison de serveurs d’intégration continue Matrice de comparaison serveurs http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix Critères comparaison : Combien de serveurs gestion version supportés ? Combien de stratégies de notification ? Combien d’outils de build supportés ? Capacité à réaliser des builds en parralèle ? Capacité à réaliser des builds distribués ? Capacité à réaliser builds manuel ou planifiés ? Intégration avec outil gestion bug ? Intégration IDE ? Facilité d’installation ? Administration ? www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 68
Configuration CruiseControl Configuration manuelle : fichier CC_HOME\config.xml <project> : nom du projet (attribut ‘name’) <publishers> : méthodes notifications résultat build <bootstratppers> : quelle tache avant le build ? <modificationset> : où sont les sources à scruter ? <schedule> : que lancer (script ant, maven…) <log> : pour affichage logs build sur console web Configuration graphique avec CC-Config Instructions : cc-config.sourceforge.net/install.html http://cc-config.sf.net/release/cruisecontrol-gui.jnlp www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 69
Exemple configuration www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 70
Configuration CruiseControl : Notification par mail 1 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 71
Configuration CruiseControl : projet Maven 2 sous Subversion Déclaration Accès sources SUBVERSION Récupération source SUBVERSION pour un projet maven2 3 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 72
CruiseControl : détail résultat build www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 73
CC-Config : Configuration & Monitoring graphique www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING 74
www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING Bibliographie SVN Book Editions O’Reilly 407 pages Java Power Tools 932 pages Ant in action Editions Manning 600 pages Maven book 420 pages www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 120
Contact : Douglas Mbiandou Ingénieur INSA Lyon (2000) 10 ans d'expériences projets SI Architecte / Formateur Java Responsable formations Objis douglas.mbiandou@objis.com Tél : 04 78 29 37 26 / 06 60 46 76 45 www.objis.com - Formation INTEGRATION CONTINUE www.objis.com - Formation SPRINGwww.objis.com - Formation SPRING 76