A presentation at Touraine Tech in in Tours, France by Stéphane Philippart
10 ans d’usine logicielle Du petit garage à l’industrialisation #TNT19
Qui suis-Je ? Architecte logiciel Développeur Java Geek Agilité & Scrum @HM depuis 11 ans 1999 2004 2006 2008 www.linkedin.com/in/philippartStephane
Disclaimer Du vrai “c’était mieux avant” (ou pas ) Du vrai troll Du vrai “ah ouais on faisait ça aussi avant”
Harmonie Mutuelle en bref
Quelques chiffres 4 ,5 M de personnes protégées 35 000 entreprises clientes 520 000 ayants droit (RSI) agences en France 300+ 5 000+ collaborateurs 380 dont en IT
Big Bang 2008 ⇒ 2010
Il n’y avait vraiment rien ? Avant 2008 : je ne sais pas vraiment je n’étais pas là :) 2006 : naissance du GIE SIHM (principalement rapprochement d’Harmonie Mutualité et de Prévadiès). Le principal enjeu: faire cohabiter deux SI ensembles et créer un nouvel SI. Donc beaucoup (trop ?) de batchs de nuit avec notre ETL: DataStage. Très peu de développements temps réel, hormis des progiciels ou quelques applications intranet.
3 personnes (1 manager) Rôles : L’organisation Petite équipe, petits moyens, petits ????? ● ● ● ● Support aux développements Java Administration de WLS, DTS et BO Mise en place de normes & bonnes pratiques Création de librairies transverses
Support aux devs ● ● Problèmes de configuration de postes : maven, éclipse (BEA Workshop), Weblogic, … Problèmes de développements : bugs avec les frameworks utilisés voir le code produit par les développeurs
Support à l’installation du poste de développement
Administration ● ● Dev to prod : la production est un vrai métier ! Dans le doute reboot : on ne s’invente pas administrateur de plateforme lorsque l’on est développeur L’ancêtre du DevOps :p
Normes & Bonnes Pratiques ● ● ● Principalement sur le développement (très peu sur la conception & l’architecture) Articles dans un Wiki (mediawiki) Revues de code manuelles
Librairies Transverses ● ● ● Faciliter l’application des normes Début de factorisation de code dans des librairies maison Maintenance des shared-lib Weblogic
Maven Les technos et outils utilisés C’était hype à l’époque ! (enfin presque :)) JEE 5 JSF EJB 3.0 Eclipse / BEA Workshop Weblogic DTS BO
Maven 2 (puis 3) ● ● ● ● Gestionnaire de dépendance et de packaging Eviter de devoir gérer le classpath de compilation dans chaque IDE Intégration précaire dans Eclipse Première configuration centralisée (profils, proxy d’entreprise, …)
JEE5, JSF, EJB … dans Weblogic ● ● ● ● EAR … ouch La promesse (ou les mensonges) de JSF Tomahawk Stuck Threads
Eclipse vs Netbeans (à la fin c’est Intellj qui gagne) ● ● ● ● Bataille de clochers Erreurs à ne pas reproduire Maven au secours !! Ne plus dépendre de l’IDE
BO & DTS ● ● ● Legacy, vous avez dits legacy ? « Administration » Pas d’intégration dans la PIC
Etabli SVN Shared Lib WLST (jpython) Revues de code manuelle Moultes procédures et normes
Débuts de l’industrialisation
Gestion des sources ● ● ● ● ● ● Subversion Gestion des droits Tortoise SVN Sauvegarde avant tout Début de la culture du commit Centralisation et distribution
Shared Lib & WLST ● ● N’avoir qu’un jeu de lib externes Déploiement et administration « automatiques »
Revue de code et procédures ● ● ● ● Pas d’outils Beaucoup de doc Beaucoup d’énergie Beaucoup de frustration
De l’Atelier de quartier vers l’usine 2010 ⇒ 2014
JEE forever ● ● JEE6 PrimeFaces & jQuery
Outillage Chez Casto il y a tout ce qu’il faut ! ● ● ● ● ● Une vraie équipe d’exploitation Jenkins Sonar Nexus Maven avancé
La production ce n’est pas pour les rigolos ● ● Enfin une vraie exploitation Recentrés sur les environnements de développement
Jenkins … CI tu seras mienne ● ● ● ● ● ● Ah enfin un peu d’automatisation Rendre de l’autonomie aux devs Outil central Le poste de développement pour … développer Beaucoup de jobs, beaucoup de maintenance Administration
nexus ● ● ● ● ● Repository Maven Ne pas tout exposer Simplifier la configuration Une mémoire de nos applications Proxy vers l’extérieur
Sonar … Juste merci ☺ ● ● ● ● ● Fini les revues de code (enfin presque) Profiles maison Toi aussi joue à la qualité Principe de la fuite d’eau Rassure la production
Maven avancé … FBI ? ● ● ● ● ● ● Archetypes Pom entreprise Gestion avancée des dépendances (base line) Centralisation de la configuration des pom Simplification des pom projets Très (trop) complexe à maintenir
Vieux cons …
Gigafactory 2014 ⇒ de nos jours
Nouvelle Organisation ● ● ● Architectes applicatifs Architectes logiciels CI / CD
Quand je serais grand je serais … ● ● ● Accompagnement projets Recentrage sur l’architecture logicielle Boost de la PIC
Git & GitHub ● ● ● ● ● ● ● ● Remplacer SVN Equipes en France RSSI ADFS SaaS Pas de WebHook Pas de migration Administration light
Portail
Feature branches
Issues et Pull Request
Jenkins multi-branches
Jenkins 2 Sérieux du groovy ??? ● ● ● ● ● Pipelines Shared lib Du vrai « as code » Factorisation Migration
Groovy … ou le syndrome de Murtaugh
Pipelines ● ● ● ● ● ● Ne plus utiliser l’interface pour paramétrer les jobs Shared Lib Projet Git (github) Factoriser / réutiliser les étapes de build Avoir une finesse des étapes de jobs Parallélisation Clone Build Package Upload Deploy Test Quality
Pipelines – Shared Lib ● ● ● ● ● ● ● ● Projet Groovy Hébergé sous GitHub Compatible feature branches Définition d’un DSL pour les Jenkinsfile Monolithe Un peu figé Mode de développement un peu lourd Tests unitaires complexes
Pipeline – GitHub
Pipeline – Projet / DSL
Pipeline – Jenkinsfile
Sonarqube Fidèle au poste ● ● ● Passage à la 6.7 LTS Simplification Outch l’analyse multi-branches
Dashboard
Drill down jusqu’à l’anomalie
artifactory Un repo pour les gouverner tous ● ● ● D’abord remplacer et améliorer Nexus Avoir un référentiel unique Se projeter dans l’avenir
AU revoir … Et merci Nexus ● ● ● Nexus 2 vieillissant Version Pro X (24/7 + XRay) Support efficace
Un référentiel unique ● ● ● Un seul outil pour l’ensemble de nos binaires Une seule façon de le configurer Des logs unifiés
Configuration d’un gestionnaire de dépendances
Browser de dépendances
L’avenir ● ● ● ● ● Architecture plus robuste Docker Promotion Xray Ouverture vers de nouveaux types de repositories (CRAN, Conan, …)
Deploy Hack & Click vers le CD ● ● ● ● Développement maison Automatiser ce qui peut l’être Faciliter les déploiements Normaliser les déploiements
Développement maison ● ● ● ● On n’est jamais mieux servi que par sois même ☺ Existence de scripts perl PERL + Python Rundeck pour piloter les scripts
Faciliter & Normaliser les déploiements ● ● ● ● Couplé à notre GCL : livraison & déploiement automatique Chaque typologie de déploiement est normalisée SQL, DTS, Java, Angular Vision de l’état du déploiement de chaque composants
Deploy en action
Web Services Fichiers, point à point vers le couplage lâche ● ● ● ● SOA SOAP & REST ESB & API Gateway Couplage lâche & asynchronisme
SOA, SOAP & REST sont dans un bateau … ● ● ● ● ● ● ● Pourquoi la SOA ? Pourquoi si tard ? SOAP, Really ? REST c’est magique ? Contrat de services Objets d’entreprise The spaghetti incident !
ESB & API Gateway ● ● ● ● TIBCO Broker JMS Robustesse Supervision ● ● ● ● ● Exposition à l’extérieur Rationaliser les développements Composition Translations / transformations L’avènement du REST
Et après ? ● ● ● ● Les micros-services Registry de services Un portail d’API Management transverse Encore plus d’automatisation et d’industrialisation
ELK Log me tender … ● ● Du log et encore du log Premiers pas Docker
Log & Beauty ● ● ● Un seul endroit pour tous les logs (JEE, ESB, Boot, …) Kibana Docker
Coding ? On veut coder !!!! ● ● ● ● Printemps Angulaire Grosse Donnée DTS & BO
Spring … on respire ● ● ● ● ● JEE trop rigide Emancipation des développeurs Spring* Fat jar Ouverture vers les micros services et Docker </ >
2.X Spring* 4.X
Seeds & Frameworks
Angular … C’est cool, euh vraiment ? ● ● ● ● Remplacer JSF / jQuery Avoir des applications Web riches Emancipations des développeurs Angular*
Seeds & Frameworks
C’est cool quand c’est simple ☺
1.X Angular* 2.X, 4.x et 6.X
Big Data … Nouveau Monde ● ● ● ● ● DataHub & DataLab Projet agile (en vrai) Socle récent mais en production PIC pour le Java Encore pleins de choses à construire
Accès aux données Ingestion Stockage Traitement fil de l’eau Catalogue Traitement fil batch Gestion des flux de données Automator Installation, Administration et supervision DataHub Sécurité Intégration à l’infrastructure
Accès aux données Préparation du modèle Analyse des données dataLab Supervision
DTS & BO … Goodbye blue sky ● ● ● N’est plus géré par notre usine logicielle BO est géré par une équipe décisionnelle DTS par l’équipe historique
Au final c’est plutôt pas mal :)
Demain ?
Vers l’infini et l’au delà Portail, automatisation, docker, devops, ouverture des technos, …
Portail & Services ● ● ● ● ● ● Simplifier l’utilisation des socles de développement Automatiser un maximum Accéder à l’information Personnaliser à l’entreprise Offre « as a service » de l’usine logicielle Simplification des composants des pipelines
Automatisation ● ● ● ● Dev to recette Dev to production Builds sur changement de code Qualimétrie et tests sur pull request
Docker ● ● ● ● ● Simplifier la PIC elle-même Simplifier le packaging & déploiement des applications Simplifier l’utilisation de nouvelles technos Rationnaliser les machines Unifier les déploiements, l’administration et la supervision
DevOps ● ● Permettre aux équipes d’avoir les outils nécessaires Cohabitation legacy et nouveaux projets
Ouverture des technos ● ● La techno la plus adaptée au besoin ou au développeur Dans un environnement cadré et responsable
10 ans, cela fait déjà 10 ans qu’au sein d’Harmonie Mutuelle nous avons décidé de s’outiller, de s’automatiser et de mettre en place des processus pour améliorer nos développements mais aussi permettre aux développeurs d’utiliser les langages et Frameworks qu’ils préfèrent. Cela n’a pas été sans heurs, sans souffrances et sans erreurs mais 10 ans après on peut être fiers de ce que l’on a accomplit et excités de ce qu’il reste à faire.
Lors de ce talk nous parcourons ensembles les 10 ans passés à construire des socles de développements, à imaginer des processus, à se tromper et recommencer et à chercher comment fluidifier et automatiser tout ça.
Nous verrons aussi nos différents choix de technologies et Frameworks pour arriver à nos objectifs : Jenkins 1 & 2, Sonarqube, Nexus / Artifactory, Primefaces, SpringBoot, …
Nous finirons par voir ensembles ce qu’il nous reste à faire pour encore nous améliorer et nos réflexions pour le futur (avec Docker notamment).
Here’s what was said about this presentation on social media.
Bon visiblement pas si mal 😆#TNT19 pic.twitter.com/ckI8RR0THL
— Stéphane Philippart (@wildagsx) February 1, 2019