Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins



Documents pareils
Serena Software. Damien Terrien Solution Architect

Hudson Serveur d Intégration Continue. Adrien Lecharpentier IR3 Ingénieurs2000, Université de Marne la Vallée

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

HISTOIRE D UNE DIGITAL FACTORY

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Environnement de Développement Outils Open-Source d'integration Continue. Exemple de Mise en Oeuvre

L Intégration Continue & Agilité

Livrer chaque jour ce qui est prêt! Points clés du développement d un produit avec une livrasion par jour.

Cedric Dumoulin (C) The Java EE 7 Tutorial

JOnAS Day 5.1. Outils de développements

Automatisation de l administration système

Le Cloud: Mythe ou Réalité?

Java pour le Web. Cours Java - F. Michel

Marie-Christine Spengler

Youssef LYHYAOUI Ingénieur Java/J2EE, SOA, ESB, Web services 31 ans Statut : Indépendant SITUATION ACTUELLE

Chef de projet / Architecte JEE 15 ans d expérience

PRODUCTS LIST (updated 11th January 2010)

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Catalogue des Formations Techniques

Environnements de développement (intégrés)

Bases de données et environnements distribués Chapitre I : Architecture logicielle technologies de developpement en environnement

S10 - Automatisez la compilation et le déploiement de vos applications IBM i avec Arcad Pack for Rational

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Installer Enterprise Miner 5.1 en SAS environnement Windows

Consultant MOE/Référent technique JAVA/J2EE JSF, RICH FACES

EXALOGIC ELASTIC CLOUD MANAGEMENT

TD/TP 1 Introduction au SDK d Android

Java à Murex: un retour d'expérience. Jean-Pierre DACHER & Craig MORRISON

Vers une meilleure gouvernance des plateformes d ingénierie

Enterprise Scrum Organisation des développements chez exo. Agile Tour Rennes 2010 / 10 / 07

Expert technique J2EE

Introduction à Eclipse

Président d Inotekk Gestion de la société, développement du portefeuille clients, gestion et réalisation des projets informatiques

Cyrille GUERIN 823, place Soulanges Brossard, J4X1L8

Vulgarisation Java EE Java EE, c est quoi?

Laurent JOLIN. Compétences. Expériences professionnelles. Architecte technique. 15, rue Jean Favier Toulouse

Hassene BELGACEM. Expériences Professionnelles. JEE architect / Technical leader. Ingénieur Informatique. Cycle Préparatoire

SonarQube : une autre vision de votre logiciel

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Les 10 pratiques pour adopter une démarche DevOps efficace

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Gérer ses environnements de développement avec Vagrant RMLL 2012

Convergence entre Sécurité et Conformité par l approche Software as a Service Présentation en avant-première de QualysGuard Policy Compliance

COMPÉTENCES TECHNIQUES

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

DotNet. Plan. Les outils de développement

Industrialisation de la chaîne de production : validation, intégration, tests

DevOps en pratique. Philippe Bauquel,

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

Notre Catalogue des Formations IT / 2015

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É JAVA. 32 ans - 6 ans d'expérience

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Compte Rendu d intégration d application

Valorisez vos actifs logiciels avec Rational Asset Manager. Jean-Michel Athané, Certified IT Specialist IBM Rational Software

Hébergement de sites Web

ACCORD-CADRE DE TECHNIQUES DE L'INFORMATION ET DE LA COMMUNICATION. PROCEDURE ADAPTEE En application des articles 28 et 76 du Code des Marchés Publics

Guide des Développeurs SITools2 V3

Outils de développement collaboratif

Réussir ses Déploiements Applicatifs

Automatisation de l administration système avec

Vérifier la qualité de vos applications logicielle de manière continue

Direction des Technologies de l Information. Présentation OCDE. Contribution du Parlement européen. L utilisation de l OPEN SOURCE au PE

Cloud et PaaS: les développeurs reprennent le

Module BD et sites WEB

Formation en Logiciels Libres. Fiche d inscription

Olivier Deheurles Ingénieur conception et développement.net

Quick Start Installation de MDweb version 2.3

Industrialisation du déploiement d'applications et de socles techniques

PostgreSQL, le cœur d un système critique

Journée IJD. Moussa Tari Bako Bachir. 25 juin 2012 ARLES/INRIA. Introduction Travail Chez ARLES

Solution d inventaire automatisé d un parc informatique et de télédistribution OCS INVENTORY NG. EHRHARD Eric - Gestionnaire Parc Informatique

Rendez-vous la liberté avec Rational Quality Manager

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

Générer du code à partir d une description de haut niveau

Lancelot Bertrand Expert Java J2ee

en SCÈNE RATIONAL Rational Démonstration SDP : automatisation de la chaîne de développement Samira BATAOUCHE sbataouche@fr.ibm.com

Serveur de travail collaboratif Michaël Hoste -

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Les tableaux de bord de pilotage de nouvelle génération. Copyright PRELYTIS

7 villa de la citadelle Né le 13 mai Arcueil Nationalité : Française. Développeur Web JEE COMPÉTENCES

MailStore Server 7 Caractéristiques techniques

L3 informatique TP n o 2 : Les applications réseau

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Windows (2000/NT), Solaris, AIX, HP-UX, Linux Haute disponibilité : SunCluster 3, Veritas Cluster Server 4. J2EE (JSP, Servlet, EJB, JTA), Open Source

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É JAVA - Android. 29 ans - 5 ans d'expérience

Jahia. Guillaume Monnette École Ingénieurs 2000 Marne-La-Vallée IR3

SUGARCRM Sugar Open Source Guide d Installation de French SugarCRM Open Source Version 4.2

Stéphane DERACO, DSI CNRS l Argos Devops : de l hyperviseur aux conteneurs l 11/12/2014 DOCKER

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Avantages. Protection des réseaux corporatifs de gestion centralisée

Annexe 10 - Procédure pour créer un Jar

Open Source Job Scheduler. Installation(s)

30 ans d ingénierie, 23 ans de conseil en architecture de SI

Point sur les solutions de développement d apps pour les périphériques mobiles

What s New. Sun ONE Application Server. Version 7, Enterprise Edition

Transcription:

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins Un retour d expérience Patrice RINGOT Ingénieur en développement et déploiement d applications - INIST/CNRS Rencontre DevelopR6 sur les outils de packaging et de déploiement 14 juin 2012

Rappels Java est un langage compilé. L entité minimale livrable est une classe compilé correspondant à un fichier source. Dans la pratique on ne livre pas des classes compilées à l unité. On rassemble les classes au sein de fichiers ZIP (jar,war,aar,ear) dont la structure interne dépend du type de livrable (librairie, application web, ). Le packaging en Java consiste donc à produire des «jars» qui sont à la base des processus de déploiement (nécessaires, mais pas suffisants). Construction et déploiement d'applicatifs Java 2

Le contexte (cf saisons 1 et 4 de DevelopR6!) Applicatif de production de métadonnées bibliographiques Serveurs: Linux, Windows, (HPUX) JBoss 6.1 (EJB 3.1, JPA 1.0, JDBC, Servlet) PostgreSQL 9.1 & Lucene (serveurs à l intérieur ou à l extérieur de l INIST) Clients: Windows, MacOS, (Linux) Mode client-serveur: IHM Swing, EJB 3.1, HTTP Mode déconnecté: IHM Swing, H2 + Lucene + JPA 1.0, HTTP Construction et déploiement d'applicatifs Java 3

Développement/Déploiement Swing EJB (LAN) ou H2/JPA/HTTP(WAN) Lucene Prod (INIST ou externe) Deploy/Deploy! Dev/integration (INIST) Prod (INIST ou externe) Deploy! Deploy! JBoss 6.1 EJB/JPA/Servlet PostgreSQL Lucene Deploy! JBoss 6.1 EJB/JPA/Servlet PostgreSQL Lucene Construction et déploiement d'applicatifs Java 4

Apache Maven Concurrents: Ant, Gradle, Ivy et Ant, Outil de build/packaging Java Bien intégré dans les IDE Indépendant des IDE Déclaratif Basé sur des conventions (over configuration) Système de phase (compile/test/package/install/deploy) Modulaire et extensible S appuie (http) sur un repository public d artefacts (~ jars) et des dépendances exprimées Construction et déploiement d'applicatifs Java 5

Maven pom de base Conventions SNAPSHOT Coordonnées Maven Construction et déploiement d'applicatifs Java 6

Maven Dépendances Scopes Dépendances transitives Construction et déploiement d'applicatifs Java 7

Maven: phases Phases Maven principales compile compile the source code of the project test test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed package take the compiled code and package it in its distributable format, such as a JAR. install install the package into the local repository, for use as a dependency in other projects locally deploy done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. Construction et déploiement d'applicatifs Java 8

Maven: packaging F:\workspaces\workspace_test\simple>mvn package [INFO] ------------------------------------------------------------------------ [INFO] Building simple 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ simple --- [INFO] Compiling 1 source file to F:\workspaces\workspace_test\simple\target\classes [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testcompile (default-testcompile) @ simple --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ simple --- [INFO] Surefire report directory: F:\workspaces\workspace_test\simple\target\surefire-reports T E S T S Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ simple --- [INFO] Building jar: F:\workspaces\workspace_test\simple\target\simple-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.530s [INFO] Finished at: Fri Jun 01 13:07:20 CEST 2012 [INFO] Final Memory: 8M/153M [INFO] ------------------------------------------------------------------------ Construction et déploiement d'applicatifs Java 9

Maven: repository local F:\workspaces\workspace_test\simple>mvn install [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ simple --- Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ simple --- [INFO] [INFO] --- maven-install-plugin:2.3.1:install (default-install) @ simple --- [INFO] Installing F:\workspaces\workspace_test\simple\target\simple-1.0-SNAPSHOT.jar to d:\ringot\.m2\repository\org\tognir\simple\1.0-snapshot\simple-1.0-snapshot.jar [INFO] Installing F:\workspaces\workspace_test\simple\pom.xml to d:\ringot\.m2\repository\org\tognir\simple\1.0- SNAPSHOT\simple-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS Ce qui est dans le repository local de l utilisateur ($HOME/.m2) peut être utilisé comme dépendance dans d autres projets de l utilisateur (en local): <dependency> <groupid>org.tognir</groupid> <artifactid>simple</artifactid> <version>1.0-snapshot</version> <scope>compile</scope> </dependency> Construction et déploiement d'applicatifs Java 10

Maven: avenir Statut «legacy» (comme Ant) Challengé (comme ses concurrents) par Jigsaw (Java 8, sept. 2013) Modularisation de Java, gestion des dépendances, packaging (jmod, rpm, deb) Plus de classpath, ni de jars mais des modules A voir: Présentation d Alexis Moussine-Pouchkine (Oracle à l époque) au Paris JUG : http://www.parleys.com/#st=5&id=3124 Construction et déploiement d'applicatifs Java 11

Maven: en résumé Maven permet de compiler, tester et packager des livrables Java. Il s appuie sur un système de dépendances servies par un repository public central. Il marche aussi bien dans les IDE qu en ligne de commande, ce qui signifie qu il est automatisable. Construction et déploiement d'applicatifs Java 12

Apache Archiva Concurrents: Nexus et Artifactory. Eléments de comparaison: ici. Repository de site d artefacts Proxy Maven vis-à-vis des repositories externes moins de dépendances opérationnelles % Mr Internet un unique fournisseur pour les configurations Maven Gestion centralisée des artefacts (= les produits du build ~ jar/war/ear/aar/tar/zip/ ) produits sur site introuvables en libre accès sur des repositories externes Service indispensable quand on développe avec Maven en équipe Administrable et utilisable via HTTP Construction et déploiement d'applicatifs Java 13

Archiva: vue de haut Recherche d artefacts Page d accueil d Archiva Gestion (rapports, utilisateurs, artefacts) Administration (repositories, proxy, entretien du système) Construction et déploiement d'applicatifs Java 14

Archiva: artefact versionné Navigation par Coordonnées Maven Construction et déploiement d'applicatifs Java 15

Archiva: artefact en dev Construction et déploiement d'applicatifs Java 16

Archiva: repositories Internal repository { Central repo Codehaus repo règles règles Snapshots repository XYZ repo règles Serveur Archiva local Construction et déploiement d'applicatifs Java 17

Archiva & Maven junit 4.10? junit 4.10? Internal repository junit 4.10 { junit 4.10? Central repo junit 4.10 Codehaus repo règles règles junit 4.10? Snapshots repository XYZ repo règles junit 4.10 Serveur Archiva local Construction et déploiement d'applicatifs Java 18

mvn deploy Internal repository { Central repo Codehaus repo règles règles simple 1.0- SNAPSHOT Snapshots repository simple 1.0- SNAPSHOT XYZ repo Serveur Archiva règles local Construction et déploiement d'applicatifs Java 19

mvn release SVN simple 1.0 Internal repository Création version 1.0 de simple Version Central courante repo= 1.1-SNAPSHOT { Codehaus repo règles règles simple simple 1.0- SNAPSHOT 1.0 Snapshots repository simple 1.0- SNAPSHOT XYZ repo Serveur Archiva règles local Construction et déploiement d'applicatifs Java 20

Maven et Archiva: en résumé Maven permet de compiler, tester et packager des livrables Java, en cours de développement, ou prêts à la mise en production. Archiva est un proxy spécialisé Maven qui permet de partager sur le réseau local des livrables Java. Construction et déploiement d'applicatifs Java 21

Serveur d Intégration Continue Jenkins Concurrents: Hudson, Teamcity, CruiseControl Construction automatique et régulière d applicatifs à partir de leur lieu de stockage dans un SCM (SVN, Git, ) en utilisant leur outil de build (Maven, Gradle, Ant, ) sur évènement (commit, à heure fixe, dépendance entre builds, action utilisateur) Détection rapide des problèmes d intégration ou des régressions Production de rapports état des tests unitaires (nombre, taux de succès, couverture) conformité à des critères de qualité définis par l équipe de dev (Findbugs, Checkstyle) Contrôle qualité permanent, homogénéisation du travail d équipe Etapes pre/post build Base de déploiement (possibilité de déposer des livrables quelque part) Construction et déploiement d'applicatifs Java 22

Jenkins: vue de haut Construction et déploiement d'applicatifs Java 23

Jenkins: administration Construction et déploiement d'applicatifs Java 24

Jenkins: plugins Construction et déploiement d'applicatifs Java 25

Jenkins Construction et déploiement d'applicatifs Java 26

Jenkins Construction et déploiement d'applicatifs Java 27

Jenkins: config projet 1/2 Construction et déploiement d'applicatifs Java 28

Jenkins: config projet 2/2 Construction et déploiement d'applicatifs Java 29

Jenkins: build! Construction et déploiement d'applicatifs Java 30

Jenkins: en résumé Jenkins permet d intégrer les applicatifs Java le plus souvent possible On est alerté au plus tôt des erreurs d intégration ou des régressions et on garde un contrôle constant sur le niveau de qualité que l on souhaite respecter Jenkins est également capable de déployer les artefacts qu ils construit dans le cadre de sa fonction première grâce aux postactions Construction et déploiement d'applicatifs Java 31

Groovy Langage dynamique tournant sur la JVM (2003) Inspiré de Ruby, Python, Smalltalk Interopérable avec Java et intégré dans son écosystème Très proche syntaxiquement de Java Ticket d entrée plus que raisonnable et à la fois beaucoup plus expressif que Java Syntaxe allégée, Regexp, Closures, Builders, Moins performant que Java et bientôt au coude à coude (static compilation à venir en 2.0, avec quelques limitations) Construction et déploiement d'applicatifs Java 32

Groovy: nos use cases Utilisé en périphérie des applicatifs Comme un meilleur Java (on est loin d être des experts Groovy ) Comme un remplaçant de Perl (et Bash/DOS au plus possible) Scripts de déploiement, de livraison d artefacts, d administration d applicatif en ligne de commande Déployé en OneJar (jar autosuffisant: l ami du déployeur) Construction et déploiement d'applicatifs Java 33

Groovy: un exemple convainquant def schema = "PROD" def sql = Sql.newInstance("jdbc:oracle:thin:@hostname:1526:${schema}", "scott", "tiger", "oracle.jdbc.driver.oracledriver") def xml = new MarkupBuilder(new FileWriter(new File('out.xml'))) xml.agents { sql.eachrow(" SELECT id, name, givenname, unit FROM ${schema}.people ") { row -> xml.agent(id:row.id) { name( row.name ) givenname( row.givenname ) unit( row.unit ) } } } Construction et déploiement d'applicatifs Java 34

Déploiement serveur Script Groovy, fabriqué et livré en OneJar grâce à Maven/Archiva $JAVA_HOME/bin/java -jar prodmd-setup-2.0.8-onejar.jar deploy-coop --install-dir=/un/petit/chemin/qui/sent/la/noisette --deploy-jboss --jboss-server-host=monserver.tognir.org --jboss-server-port=11111 --jboss-jndi-port=11112 --jboss-admin-username=treme --jboss-admin-password=the-wire --jboss-zip-file=/softs/jboss-as-distribution-6.1.0.final.zip --postgresql-dir=/usr/lib/postgresql/9.1 --postgresql-server-host=localhost --postgresql-server-port=51819 --db-name=mydb --db-user=dbuser --db-password=dbpass --java-home=$java_home --java-xmx=1024 --java-xms=256 L applicatif complet (etc, bin, crontab, logrotate, jboss dézippé/configuré, ) est installé en une commande. Il reste ensuite à y installer les livrables (ear,jar,war,zip) construits avec Maven Construction et déploiement d'applicatifs Java 35

Installation/Mise à jour livrables Cas des livrables versionnés (développeurs, production) V=1.0 URL=http://server:port/archiva/repository/internal # Récupération du livrable à partir d Archiva curl -v -O --user $U:$P $URL/fr/inist/prodmd/prodmd-coop-ea/$V/prodmd-coop-ea-$V.ear # Utilisation d une sous-commande du script de déploiement pour déployer # le livrable au bon endroit pour JBoss $SCRIPT_DEPLOY install-prodmd --deliverable=prodmd-coop-ea-$v.ear Cas des livrables SNAPSHOT : utilisation de Jenkins (tests fonctionnels CDP) Chaque nuit, si le build du projet réussit: Copie par SCP des livrables produits par Jenkins sur le serveur de TEST SSH sur le serveur de test de $SCRIPT_DEPLOY install-prodmd Construction et déploiement d'applicatifs Java 36

Avantages d automatiser le déploiement (à ce point) Tout le monde n est pas un expert de tout Automatiser le déploiement permet à tous les membres de l équipe (dev, prod) d installer la totalité de l applicatif sans difficulté et de la même manière Les paramètres du script évitent d avoir à modifier manuellement les configurations des différents middlewares (façade) Personne n est parfait Aussi bien en sécurité, qu en paramétrage de middleware, qu en général Les progrès (corrections de bug, tunning, nouveaux paramètres) sont «gravés» dans le script de déploiement, et donc partagés par tout le monde Construction et déploiement d'applicatifs Java 37

Déploiement client JavaWebStart: trop de problèmes! IHM Client = Un OneJar dont on assure la livraison (via un servlet de l applicatif), l installation (création de raccourcis) et la mise à jour, pour les différents OS supportés Mise à jour côté serveur comme tout livrable de l applicatif (utilisation du script de déploiement), et détection des nouveautés côté client à chaque exécution Java: une version de Java qualifiée livrée (et éventuellement mise à jour) de la même manière que l applicatif client réservée à l utilisation exclusive de l applicatif pas de lien avec les navigateurs = pas de problème de sécurité indépendante des autres versions de Java installée sur le poste de l utilisateur Pas de regression Construction et déploiement d'applicatifs Java 38

Groovy: en résumé Un langage qui a les mêmes prérequis que Java et qui permet d écrire beaucoup plus simplement/rapidement qu en Java des logiciels de déploiement complets d applicatifs Construction et déploiement d'applicatifs Java 39

Perspectives Aller dans la direction du packaging natif (rpm, deb) y inclure les livrables script de déploiement se mettre en position d être provisionné (Puppet/Chef) Le packaging natif, c est un excellent trait d union entre les Devs et les OPs Construction et déploiement d'applicatifs Java 40

DevOps: bonne médecine Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation By Jez Humble, David Farley, ISBN-13: 978-0-321-60191-9 Présentations DevOps d Henri Gomez Au Lyon JUG: DevOps, Retour d'expérience http://www.slideshare.net/henri.gomez/20111220-lyon-jugdevopsculture Au Paris JUG: DevOps, l approche packaging natif http://www.parleys.com/#st=5&id=2979 Arnaud Héritier: Setup your DevOps playground with Puppet, Vagrant & co http://blog.aheritier.net/setup-your-devops-playground-with-puppet-vagrant-co/ Construction et déploiement d'applicatifs Java 41

Merci! Construction et déploiement d'applicatifs Java 42