Usine logicielle JavaL’industrialisation de la
mise en production
Ippon Technologies © 2014
Licence
Cette formation vous est fournie sous licence Creative Commons AttributionNonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)
Vous êtes libres de :
Copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
Selon les conditions suivantes :
● Attribution : Vous devez créditer l'Oeuvre, intégrer un lien vers la licence et indiquer si des modifications ont été effectuées à l'Oeuvre. Vous devez indiquer ces informations par tous les moyens possibles mais vous ne pouvez pas suggérer que l'Offrant vous soutient ou soutient la façon dont vous avez utilisé son Oeuvre.
● Pas d’Utilisation Commerciale : Vous n'êtes pas autoriser à faire un usage commercial de cette Oeuvre, tout ou partie du matériel la composant.
● Pas de modifications : Dans le cas où vous effectuez un remix, que vous transformez, ou créez à partir du matériel composant l'Oeuvre originale, vous n'êtes pas autorisé à distribuer ou mettre à disposition l'Oeuvre modifiée.
http://creativecommons.org/licenses/by-nc-nd/4.0/deed.fr
Ippon Technologies © 2014
Ippon Formation en bref
Pourquoi Ippon Technologies publie ses supports de formation ?
Car Ippon participe à la communauté Java et Web et soutien le modèle open-source
Le support théorique représente 40% du temps de formation, l'intérêt est dans les Travaux Pratiques et l'expert Ippon qui assure le cours
Ippon Technologies © 2014
Pour nous contacter
Pour nous contacter et participer à nos formations :● Technique : [email protected]● Commercial : [email protected]
Toutes les informations et les dates de formations sont sur notre site internet et notre blog:● http://www.ippon.fr/formation● http://blog.ippon.fr
Ippon Technologies © 2014
Sommaire
● Introduction● Le déploiement logiciel
○ Approche naïve○ Problématiques
● Vers le déploiement continu○ Grands principes○ Solutions
● Le déploiement continu pas à pas○ IDE○ Versionnement & Gestion de configuration○ Build○ Intégration continue○ Tests & Qualité du code○ Bug tracking○ Outils de déploiement & de monitoring
Ippon Technologies © 2014
Introduction
Ippon Technologies © 2014
Changement vs Stabilité (1)
VS
Ippon Technologies © 2014
Changement vs Stabilité (2)
VS
Ippon Technologies © 2014
Time to market vs Opportunités
VS
Ippon Technologies © 2014
Industrialisation du changement
VS
Ippon Technologies © 2014
Mise en production naïveProblèmes courants rencontrésMise à jour des besoins
Le déploiement logiciel
Ippon Technologies © 2014
Une mise en production standard
Développement
Compilation
Déploiement
Intégration
Validation / Recette manuelle
Mise en production
Ippon Technologies © 2014
Problèmes fréquemment rencontrés
Ippon Technologies © 2014
Développement
Mésinterprétation du cahier des chargesManque de configurationRessources locales incompatibles avec la productionBugs
Ippon Technologies © 2014
Compilation
Quelles sources ?Quelles options de compilation ?Quelles dépendances de librairie ?Quelles versions ?Sur quelle plate-forme ?Qui est responsable ?
Ippon Technologies © 2014
Déploiement
Arrêt du service ?Copie du binaire au bon endroit (bon tomcat)Viabilité du fichierTraçabilité du fichier mis à dispositionCommunication quand à la disponibilité du livrable
Ippon Technologies © 2014
Deploiement - Anti-pattern
Un déploiement ? Quel déploiement ?
Ippon Technologies © 2014
Intégration
Le livrable n’est pas suffisamment configurableLa configuration est mal faite
● Ressources inexistantes● Ressources incomplètes● Ressources pas à jour● Mauvaise plate-forme cible● Incompatibilités de version● Mise à jour des données manquante/incomplète
Elle nécessite une expertise techniqueElle est fastidieuse en cas de plate-forme fortement redondante
Ippon Technologies © 2014
Anti-pattern d’intégration
Documentation fastidieuseAller-retours Dev-IntegrationModification de dernière minuteÉléments de cluster hétérogènesRelease de plus de quelques minutes
Ippon Technologies © 2014
Recette
Test volatiles● non fiables● non reproductibles● incomplets
Tâches rébarbatives, manuelles, hautement sujettes à l’erreurEffet boite noire
Ippon Technologies © 2014
Anti-pattern de recette
Tests manuels
Ippon Technologies © 2014
Mise en production
Temps d’indisponibilitéComportement de l’application en condition réelleMulti-utilisateur
● Confidentialité des données● Concurrence
Tenue en chargeRetour en arrière
Ippon Technologies © 2014
Mise en production - Anti-pattern
Temps d’indisponibilité excessifIssue imprévisible
Ippon Technologies © 2014
Besoins mis à jour
Ippon Technologies © 2014
Émergence de nouveaux besoins
Une mise en production rapide, sans risque
Visibilité des livrables : quoi, quand, oùVisibilité de la disponibilité/performance
Une mise en production doit devenir un processus automatisé, rapide, répétable et répété fréquemment, maîtrisé, prévisible, facilement inversable
Ippon Technologies © 2014
Émergence de nouveaux besoins
Identification du livrable● Versionnement systématique
Build automatique
Validation / Non régression systématique● Tests unitaires automatisés● Tests d’intégration automatisés● Tests fonctionnels automatisés● Tests d’exploration
Ippon Technologies © 2014
Émergence de nouveaux besoins
Communication● Centralisation des demandes d’amélioration /
correction● Statut des releases disponibles, des déploiements
effectués● Documentation type wiki
Ippon Technologies © 2014
Émergence de nouveaux besoins
Qualité
Tests d’acceptanceTests de chargeMétriques
Automatisation du déploiement...
Ippon Technologies © 2014
Vers le déploiement continu
Ippon Technologies © 2014
Principes du déploiement continu
Ippon Technologies © 2014
Grands principes
Processus fiable et répétable● Automatisation systématique● Versionnement systématique
3 grandes étapes : provisionner, installer, configurer
Ippon Technologies © 2014
Grands principes
Affronter les tâches pénibles
Ippon Technologies © 2014
Grands principes
“Bring Quality In”
Ippon Technologies © 2014
Grands principes
Fait = Démontré à l’utilisateur
Ippon Technologies © 2014
Grands principes
Responsabiliser toute l’équipe
Ippon Technologies © 2014
Grands principes
Amélioration Continue
Ippon Technologies © 2014
Le déploiement continu pas à pas
Ippon Technologies © 2014
Solutions
Vers l’industrialisation logicielle● Outillage● Culture
Ippon Technologies © 2014
Le déploiement continu pas à pas
Environnement de Développement IntégréVersionnementGestion de configurationBuild toolsIntégration continueTests de non régressionBug TrackingOutils de déploiementOutils de monitoring
Ippon Technologies © 2014
IDEEnvironnement de
Développement Intégré
Ippon Technologies © 2014
IDE - généralités
Les caractéristiques d’un logiciel robuste :● Code lisible● Couverture de tests automatique raisonnable● Architecture saine● Outils de debugging performants● Culture d’ingénierie qui valorise le refactoring
Ippon Technologies © 2014
IDE - code lisible
Formateur de codeApplication de convention de codageDétection de redondance de code
Ippon Technologies © 2014
IDE - tests
Création simplifiée de testsLancement et résultat des testsOutil de visualisation de couverture de tests
Ippon Technologies © 2014
IDE - debugging
Debug en localDebug à distanceModification à chaud du code
Ippon Technologies © 2014
IDE - refactoring
Identification systématique des références(code et commentaire)
Plugin de détection de code à factoriser/améliorer(PMD, Checkstyle)
Ippon Technologies © 2014
IDE - interaction
SCM (Source Code Management)Gestion des dépendancesOutil de bug-trackingServeur web, avec accès en mode debugBase de données
Ippon Technologies © 2014
IDE - offre
Intellij IDEAEclipseNetbeans
Ippon Technologies © 2014
IDE - Netbeans 1/2
SimpleRobusteLié à OracleFonctionne mieux avec Maven* et GlassFish
Ippon Technologies © 2014
IDE - Netbeans 2/2
+ Support des bases de données+ Support web (HTML, CSS, Javascript, PHP)+ Support de technologies avancées (JavaFX, Java 3D…)- Plugins moins nombreux- En retard sur les nouveaux langages- Utilisation de Maven quasi-obligatoire
Ippon Technologies © 2014
IDE - Eclipse 1/2
Le plus répanduCommunauté / contributeurs importantsNombreux pluginsCouvre toutes les technologiesMulti-lingue
Ippon Technologies © 2014
IDE - Eclipse 2/2
+ Versatile+ Nombre impressionnant d’extensions disponibles+ Compilation incrémentale+ Visualisation instantanée des erreurs+ Gestion des projets+ Hautement configurable- Configuration spécifique- Lourdeur- Instabilité
Ippon Technologies © 2014
IDE - Intellij IDEA 1/2
StabilitéRichesse du support “out-of-the-box”Nombreux pluginsSupport natif d’UMLIntelligence contextuelle
Ippon Technologies © 2014
IDE - Intellij IDEA 2/2
+ Recherche et Navigation+ Aide contextuelle pertinente+ Support de Maven+ Support d’Android+ Import de projets avancé+ Support enrichi des tests unitaires et de la couverture+ Debugging avancé de technologies phares- N’affiche pas les erreurs des fichiers clos- Ergonomie spécifique- Payant en version commerciale
Ippon Technologies © 2014
IDE
TP Eclipse/IDEA/Netbeans
Ippon Technologies © 2014
SCMGestion de Code Source
Ippon Technologies © 2014
SCM
Stockage commun des ressources● code● configuration applicative● librairies● configuration serveur● scripts● schéma de la base de données● … tout ce qui est utile à un déploiement
Ippon Technologies © 2014
SCM - Services
CentraliseVersionneRésout les conflits
Permet le catalogage (tagging)
Ippon Technologies © 2014
SCM - Fonctionnalités
Commit/CheckoutBranching/MergingDiff current/tag/branch
Intégrité des données
Ippon Technologies © 2014
SCM - Usage
Branching / merging ; deux approches :● branche systématique● tout sur le trunk
Ippon Technologies © 2014
SCM - Usage
Ippon Technologies © 2014
SCM - Solutions
CVSSVNGit
Ippon Technologies © 2014
VersionnerGérer les dépendancesGérer la configuration systèmeGérer les environnements
Gestion de configuration
Ippon Technologies © 2014
Gestion de conf - Versionner
Aussi important que les sources
VersionnerVersionner toutÊtre à jour
Messages explicites
Ippon Technologies © 2014
Gestion de conf - Dépendances
Dépendances externesComposants logiciels
Ippon Technologies © 2014
Gestion de conf - Flexibilité
Configuration et flexibilité● Coût de développement● Coût opérationnel● Risques induits
Ippon Technologies © 2014
Gestion de conf - Typologie
Type de configuration● build● packaging● deployment● startup/runtime
Ippon Technologies © 2014
Gestion de Configuration Applicative
Configuration Applicative● Ajout d’un nouvel environnement● Nouvelle version de l’application● Upgrade de release● Relocalisation d’un serveur● Le cas des VMsValidation de configuration● Isolation● Tests
Ippon Technologies © 2014
Gestion de conf - Principes
Principes● Timing d’introduction des features● Stockage des Variables et valeurs de configuration● Automatisation de la configuration d’un environnement● Catalogue des valeurs de configuration● Nommage explicite● Modularité et encapsulation● DRY principle● Minimalisme● KISS principle● Tester la configuration
Ippon Technologies © 2014
Gestion de conf - Environnement
Configuration environnement < Configuration application
Outils de gestion de configurationGestion du changement
Ippon Technologies © 2014
Gestion de conf - Données
Données et application diffèrent en 2 points● volume● cycle de vie
Ippon Technologies © 2014
Gestion de conf - Données
Préserver les données entre 2 release● Database scripting● Modification incrémentaleContrainte supplémentaire● Rolling back Database et Zero downtime Release
Ippon Technologies © 2014
Gestion de conf - Données
Database scripting :● Initialisation DB : script, versionnement● Chaque Migration : script, versionnementButs :● Construire n’importe quelle version de la base● formaliser la dépendance de version {base:application}● Intégration au process de déploiement continu
Ippon Technologies © 2014
Gestion de conf - Données
Script d’initialisation● Création de la structure● Création des instances● Création des schémas● Alimenter les données de référencePour la release de projet simple, le process suivant peut suffir :● Suppression de la base N-1● Création de la base N● Alimentation en donnéeProjet plus complexe : Changement incrémentale
Ippon Technologies © 2014
Gestion de conf - Données
Migration IncrémentaleQu’est-ce :Roll-forward et Roll-backComment :Versionner la baseSQLUtilisation d’outil Flyway, Liquibase…Attention aux migrations dont le rollback est impossible
Ippon Technologies © 2014
Migration IncrémentaleLe cas des Migrations destructrices● Copier le contenu de tables sous un autre nom versionné● Backup/Restore
Ippon Technologies © 2014
Gestion de conf - données
Rolling back and zero downtime release● Cacher les transactions et permettre leur rejeu● Déploiement Blue-Green (prod-backup)
○ Backup Blue et restore sur Green○ Migrate Blue○ Rollback nécessaire : switch sur Green
● Découpler déploiement applicatif et migration de base○ Faire en sorte que chaque version applicative fonctionne avec la
version N et N+1 de la base de données
Ippon Technologies © 2014
Build Tools
Ippon Technologies © 2014
Build Tools
Un build doit être :Indépendant de la plate-formeReproductibleAutomatisableConfigurable
Gérer les dépendancesSe connecter au SCM
Ippon Technologies © 2014
Build Tools - L’offre
Apache AntApache MavenGradle
Ippon Technologies © 2014
Build Tools - Ant
“Modern build Tool”... qui date de 2000Implémentation Java unifiant des commandes hétérogènes dans des environnements diversUne sorte de “make”, sans la complexité d’usage
Flexible, adaptable, extensibleAbsence de contrainteInteraction avec un gestionnaire de dépendances
Ippon Technologies © 2014
Ant - Cibles et points d’extension
Create Directory Layout
Ready to compile
Generate source
Compile
depends
extension-of
depends
Ippon Technologies © 2014
Build Tools - Maven
Description du build du projet (POM)Description des dépendances du projetConventions par l’exceptionCycle de vie prédéfiniGestion de dépendances mutualisée (dépôt local/public)Nombreux plugins (appelés mojos pour Maven), que l’on peut développer soi-même
Ippon Technologies © 2014
Maven lifecycle
Validate
Compile
Test
Package
Install
Verify
Integration-test
Ippon Technologies © 2014
Maven Profiles
Séparer les tests
Surcharger la configuration par environnement
Ippon Technologies © 2014
Maven profiles - séparation des tests
Product
Integration Tests
Functionnal Tests
Parent Project
…<modules> <product></modules><profiles> <profile id=”full-test”> <modules> <module>integration-tests</module> <module>functional-tests</module> </modules> </profile></profiles><profiles> <profile id=”integration-test”> <modules> <module>integration-tests</module> </modules> </profile></profiles>...
Ippon Technologies © 2014
Maven profiles
TP - Surcharge de configuration
Ippon Technologies © 2014
Build Tools - Gradle
Le meilleur de Ant et MavenDSL (Domain-Specific Langage)DAG (Directed Acyclic Graph)Conçu pour les projets très vastesBuild incrémentalGoogle Android OS
Ippon Technologies © 2014
Gradle lifecycle
<inclure un cycle de vie du build gradle>
Ippon Technologies © 2014
Build Tools
TP - Intégration de Maven dans Jenkins
Ippon Technologies © 2014
Intégration Continue
Ippon Technologies © 2014
Commit Stage
Pipeline de déploiement
Code analysisBuild
Configuration Managment
SCM Intégration Continue
Automatic QA Test
Exploratory QA Test
Capacity / Load Test
UAT / Demo Production
IDE
Unit Test Test coverage
Artifact
Ippon Technologies © 2014
Intégration Continue - Tests
Tests unitairesTests d’intégrationTests fonctionnelsTests d’exploration
Ippon Technologies © 2014
Test unitaire
Tester des algorithmes isolésValider les règles de gestion unitairesPrévenir les risques de régressionCode testable = Code mieux pensé
Ippon Technologies © 2014
Test unitaire - Solutions
JUnit + Mockito ou EasyMockSpock + Groovy
DEMO
Ippon Technologies © 2014
Intégration Continue
TP - Tests sous Jenkins
Ippon Technologies © 2014
Test d’intégration
Vérifier le chargement du contexte du cadre applicatif (Spring, Java EE, etc.)Repenser son cloisonnement par technologieMettre à l’épreuve les transactions
Ippon Technologies © 2014
Test d’intégration - Solutions
Spring TestContext FrameworkArquillian
DEMO
Ippon Technologies © 2014
Test d’intégration - Solutions
Spring TestContext Framework@RunWith(SpringJUnit4ClassRunner.class)// specifies the Spring configuration to load for this test fixture@ContextConfiguration("daos.xml")public final class HibernateTitleDaoTests {
// this instance will be dependency injected by name
@Resource private HibernateTitleDao titleDao; public void testLoadTitle() throws Exception { Title title = this.titleDao.loadTitle(new Long(10)); assertNotNull(title); }}
Ippon Technologies © 2014
Test d’intégration - Solutions
Test 1
Test 2
Test Suite 1
Test 1
Test 2
Test Suite 2
chargement du contexte
suppression du contexte
chargement du contexte
suppression du contexte
Ippon Technologies © 2014
Test d’intégration - Solutions
Spring TestContext Framework - astuces● Charger des contextes allégés● @DirtiesContext● @IfProfileValue
Ippon Technologies © 2014
Test d’intégration - Solutions
Arquillian● Conteneur sur mesure● ShrinkWrap : artifact sur mesure
Ippon Technologies © 2014
Test fonctionnel
Jouer des scénarios completsTester l’IHM au travers de laquelle on atteint toutes les couches applicativesValider les règles de gestion non unitairesNon régression
Ippon Technologies © 2014
Test fonctionnel - Solution
Selenium 2 (webdriver, HQ et IDE)
DEMO
Ippon Technologies © 2014
Tests fonctionnels
TP - Selenium 2
Ippon Technologies © 2014
TestsAller plus loin
Ippon Technologies © 2014
Tests - Non régression
Pierre angulaire de la confiance qualitéCouvre toute l’applicationSystématisationMaintenance
Ippon Technologies © 2014
Tests - Load Test
Teste l’application déployéeSimule la charge attendue par l’applicationLes statistiques de performance comme outils de non-régression
Ippon Technologies © 2014
Tests - Stress Test
Teste l’application déployéeAugmente la charge pour identifier les limites
Ippon Technologies © 2014
Tests - Couverture de code
Indice quant à la quantité de code testé100% n’est pas un objectifFavoriser le code sensible
Ippon Technologies © 2014
Couverture de code - Solution
Emma -> JacocoCoberturaClover Cobertura
Ippon Technologies © 2014
Qualité
Ippon Technologies © 2014
Qualité du code
Homogénéiser le code
Les sept péchés capitaux du développement :● Duplication● Convention d’écriture● Manque de couverture● Bugs potentiels courants● Complexité● Documentation● Conception
Ippon Technologies © 2014
Qualité du code - Concepts
Analyse statique du codeAnalyse DynamiqueProfilersMemory ToolsMonitoring Tools
Ippon Technologies © 2014
Qualité du code - Précautions
Faux PositifsAdaptation au projetRègles personnellesLegacy projects
Ippon Technologies © 2014
Qualité du code - Solutions
FindBugsPMDCheckStyle et JalopyCoveritySonarQube
Ippon Technologies © 2014
Qualité du code - Recommandations
Les premières analyses ne seront pas pertinentesL’analyse statique seule est insuffisanteAutomatiser l’analyse de code (et l'exécuter souvent)Communiquer sur la qualitéÉviter l’excès de zèleAdapter l’analyse à chaque projetNe pas oublier les priorités
Ippon Technologies © 2014
Qualité du code
TP Sonar
Ippon Technologies © 2014
Bug Tracking
Ippon Technologies © 2014
Bug Tracking
Disposer de métriques sur les problèmes découvertsCommuniquer sur la documentation projet
Ippon Technologies © 2014
Bug Tracking - besoins
Classer les ticketsGérer les utilisateurs et leurs droitsDistinguer les projets/releasesÊtre connecté au SCMFaciliter la communicationConstituer un tableau de bord
Ippon Technologies © 2014
Bug Tracking - cycle de vie
NEW
ASSIGNED
VERIFIEDREOPEN
CLOSED
RESOLVED
FIXEDDUPLICATEWONT FIXWORK FOR MEINVALIDREMINDLATER
Ippon Technologies © 2014
Bug Tracking - Livraison
Ippon Technologies © 2014
Bug Tracking - Solutions
BugZillaJiraMantisRedmineTrac (+ Agilo)
Ippon Technologies © 2014
Déploiement
Ippon Technologies © 2014
Déploiement - Scripting
One script to rule them allUn script principal pour tous les environnements
Ippon Technologies © 2014
Déploiement - Le choix des armes
Utiliser la bonne technologie de déploiementUtiliser des outils de packaging éprouvés
Ippon Technologies © 2014
Déploiement - objectif et méthode
Mise à niveau ou Installation complèteDéploiement = processus idempotentÉvolution incrémentale
Ippon Technologies © 2014
Déploiement à grande echelle
Ippon Technologies © 2014
Déploiement à grande échelle
Ippon Technologies © 2014
Déploiement - astuces
Automatisation● Chemins relatifs● Éliminer les étapes manuelles
Ippon Technologies © 2014
Déploiement - astuces
Versionning● Marquer les binaires avec la version SCM● Ne pas commiter les binaires : Nexus, Archiva
Ippon Technologies © 2014
Déploiement - astuces
Tests● Test failed != Build Failed● Smoke tests
Ippon Technologies © 2014
Deploiement - Puppet
Logiciel d’automatisation qui définit et vérifie l’état d’une infrastructure tout au long du cycle de développement● Définir l’état attendu d’un serveur● Classes, module● Piocher dans l’existant
Ippon Technologies © 2014
Déploiement - Puppet
● Fonctionne en Client/Serveur● Chaque serveur de l’infrastructure est un client (puppet
agent)● Le serveur puppet (puppet master) héberge les modules● Les modules sont rendu paramétrable pour s’ajuster
sur chaque client● Chaque client possède les modules qui le concerne ● A chaque run puppet, un différentiel est établi entre la
configuration définie sur le master et ce que rapporte les agents.
Ippon Technologies © 2014
Ippon Technologies © 2014
Déploiement - Puppet
TP Puppet : Configurer Apache
Ippon Technologies © 2014
Monitoring
Ippon Technologies © 2014
Superviser quoi ?
Les temps d’exécution...● de service● de service distantL’occupation mémoireLes ressources partagées● pool de threads● pool de connexions● DLQ et queue sevrée/surchargéeLes succès/échecs
Ippon Technologies © 2014
Monitoring Java
Logs internes● choisir le niveau et le support (fichiers séparés, voire en
base de données)Standard JMX● exposition de propriétés du SI● de nombreuses API phares le mettent en oeuvre nativementSurveillance de la JVM● analyse des performances et de l’occupation mémoire
Ippon Technologies © 2014
Exploiter le monitoring
● Rendu graphique des métriques, dashboard(ex: Graphite)
● Seuils d’alerte sur des métriques réseau, souvent à l’aide d’agents(ex: Zabbix)
● Analyse temps réel de la JVM et suivi fin en cas de dépassement des moyennes constatées(ex: AppDynamics)
● Exploitation de logs(ex: splunk, cacti, loggly, logstash, kibana, nagios…)
Ippon Technologies © 2014
Monitoring
Sur mesureDiagnostic temps réelAlerte
Ippon Technologies © 2014
Monitoring
TP Instrumentation et exploitation
blog.ippon.frippon.fr atomes.com
@ippontech [email protected]
Top Related