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