12 ans d’usine logicielle … Du petit garage à l’industrialisation

A presentation at Codeurs en Seine in November 2020 in by Stéphane Philippart

Slide 1

Slide 1

12 ans d’usine logicielle Du petit garage à l’industrialisation

Slide 2

Slide 2

Qui suis-je ? Architecte logiciel / DevOps Développeur Java Geek Co-fondateur de TADx @wildagsx Agilité & Scrum philippartStephane @HM depuis 12 ans Stéphane Philippart www.tadx.fr @philippart-s / https://philippart-s.github.io/

Slide 3

Slide 3

Disclaimer Du vrai “c’était mieux avant” (ou pas) Du vrai troll Du vrai “ah ouais on faisait ça aussi avant”

Slide 4

Slide 4

HARMONIE MUTUELLE EN BREF 4,8 M De personnes protégées 5000 collaborateurs Dont 5°° Dans l’IT

Slide 5

Slide 5

PHASE 1 : 2008 - 2010 LA GÉNÈSE Vous avez dit legacy ? LE 1er ESSAI L’établi

Slide 6

Slide 6

LA GÉNÈSE Tout a un début !

Slide 7

Slide 7

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.

Slide 8

Slide 8

Maven JEE 5 LES TECHNOS ET OUTILS UTILISÉS C’était hype à l’époque ! (enfin presque :)) JSF (Tomahawk) EJB 3.0 Eclipse / BEA Workshop Weblogic DTS BO 2008

Slide 9

Slide 9

JEE5, JSF, EJB … dans Weblogic ● ● ● ● EAR … ouch La promesse (ou les mensonges) de JSF Tomahawk Stuck Threads

Slide 10

Slide 10

BO & DATASTAGE ● ● Legacy, vous avez dits legacy ? « Administration »

Slide 11

Slide 11

NORMES & BONNES PRATIQUES ● ● Principalement sur le développement (très peu sur la conception & l’architecture) Articles dans un Wiki (mediawiki)

Slide 12

Slide 12

LIBRAIRIES ● ● ● Faciliter l’application des normes Début de factorisation de code dans des librairies maison Maintenance des shared-lib Weblogic

Slide 13

Slide 13

ECLIPSE vs INTELLIJ ● ● ● Bataille de clochers Maven au secours !! Ne plus dépendre de l’IDE

Slide 14

Slide 14

SUPPORT ● ● ● Problèmes de configuration de postes : maven, éclipse (BEA Workshop), Weblogic, … Problèmes de développements : bugs avec les frameworks utilisés, voire le code produit par les développeurs Conclusion logique de vouloir tout normer au niveau de développement

Slide 15

Slide 15

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

Slide 16

Slide 16

L’ÉTABLI 1er essai

Slide 17

Slide 17

MAVEN 2 ● ● ● ● Gestionnaire de dépendance et de packaging Éviter 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, …)

Slide 18

Slide 18

GESTION DES SOURCES ● ● ● ● ● Gestion des droits Tortoise SVN Sauvegarde avant tout Début de la culture du commit Centralisation et distribution

Slide 19

Slide 19

SHARED LIB & WLST ● ● ● N’avoir qu’un jeu de lib externes “Maîtriser” les libs externes Déploiement et administration “automatiques”

Slide 20

Slide 20

REVUE DE CODE (et procédures) ● ● ● ● Pas d’outils Beaucoup de doc Beaucoup d’énergie Beaucoup de frustration

Slide 21

Slide 21

Bilan de la phase 1 (2008 - 2010) ● ● ● FACTORISER LE CODE (LIB) GESTIONNAIRE DE SOURCES MAVEN ● ● ● ● ● ● NORMER À OUTRANCE IMPOSER UN IDE SUPPORT AUX DEVs ADMINISTRER LA PROD REVUE DE CODE MANUELLE CONTRÔLE DES LIBS EXTERNES

Slide 22

Slide 22

PHASE 2 : 2010 - 2014 UPGRADE Atelier de quartier

Slide 23

Slide 23

JEE forever … ● ● ● ● JEE6 PrimeFaces & jQuery Essayer de suivre plus rapidement les évolutions Rendre les devs plus “heureux”

Slide 24

Slide 24

LA PROD C’EST UN VRAI MÉTIER ● ● Enfin une vraie exploitation On se recentre sur tout ce qui touche au développement

Slide 25

Slide 25

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

Slide 26

Slide 26

NEXUS ● ● ● ● ● Repository Maven Ne pas tout exposer Simplifier la configuration Une mémoire de nos applications Proxy vers l’extérieur

Slide 27

Slide 27

SONAR … JUSTE MERCI ☺ ● ● ● ● ● ● Finies les revues de code (enfin presque) Profils maison Toi aussi joue à la qualité Qualité avant le déploiement staging Principe de la fuite d’eau Rassure la production

Slide 28

Slide 28

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

Slide 29

Slide 29

Bilan de la phase 2 (2010 - 2014) ● ● ● ● PROD JENKINS NEXUS SONAR ● ● ● ● JEE JENKINS SONAR POM ENTREPRISE

Slide 30

Slide 30

Slide 31

Slide 31

PHASE 3 : 2014 - 2019 SCALE Usine Logicielle

Slide 32

Slide 32

GIT & GITHUB ● ● ● ● ● ● ● ● Remplacer SVN Équipes en France ADFS / SAML SaaS Pas de migration Administration light Feature branches Collaboratif ○ PullRequest ○ Issues ○ Portail (MD)

Slide 33

Slide 33

JENKINS 2 - PIPELINES ● ● ● ● Ne plus utiliser l’interface pour paramétrer les jobs Factoriser / réutiliser les étapes de build Avoir une finesse des étapes de jobs Parallélisation Clone Build Package Upload Deploy Test Quality

Slide 34

Slide 34

JENKINS 2 - SHARED LIBS ● ● ● ● ● ● ● ● ● ● Projet Groovy Pipelines as code Factorisation de code Hébergée 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

Slide 35

Slide 35

JENKINSFILE

Slide 36

Slide 36

SONARQUBE ● ● ● Mise à jour (LTS) Utilisation des profils et quality gate Sonar Pas d’analyse de branches (payant)

Slide 37

Slide 37

AU REVOIR NEXUS … ET MERCI ● ● ● ● Nexus 2 vieillissant Version Pro X (24/7 + XRay) Support efficace Ux

Slide 38

Slide 38

DEPLOY ● ● ● ● ● ● ● Ne plus faire les déploiements avec Jenkins Dév maison (PHP + Perl) Adossé à Rundeck 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 composant

Slide 39

Slide 39

LOG ME TENDER ● ● ● Stack ELK Un seul endroit pour tous les logs (JEE, ESB, Boot, …) Kibana

Slide 40

Slide 40

Bilan de la phase 3 (2014 - 2019) ● ● ● ● ● ● ● GIT / GITHUB JENKINS 2 PIPELINES SONARQUBE ARTIFACTORY DEPLOY LOG MANAGEMENT ● 1 SEULE SHARED LIB

Slide 41

Slide 41

ET LE CODE ?

Slide 42

Slide 42

SOA ● ● ● ● ● J+1 vers le temps réel SOAP vers REST ESB / API Gateway Nécessité d’avoir quelque chose de plus léger que JEE Vers les micro services ?

Slide 43

Slide 43

SPRING … ON RESPIRE ● ● ● ● ● JEE trop rigide Emancipation des développeurs Spring* Fat jar Ouverture vers les micros services et Docker </ 😃 >

Slide 44

Slide 44

SPRING* 1.5 puis 2.X 4.X

Slide 45

Slide 45

Inn SEEDS & FRAMEWORKS er s our ce

Slide 46

Slide 46

ANGULAR C’EST COOL … vRAIMENT ? ● ● ● ● Remplacer JSF / jQuery Avoir des applications Web riches Emancipation des développeurs Angular*

Slide 47

Slide 47

Inn SEEDS & FRAMEWORKS er s our ce

Slide 48

Slide 48

C’EST COOL QUAND C’EST SIMPLE ☺

Slide 49

Slide 49

ANGULAR* 1.X 2.X, 4.X, 6.X, 8.X, 9.X et 10.X

Slide 50

Slide 50

DTS & BO … GOODBYE ● ● ● N’est plus géré par notre usine logicielle BO est géré par une équipe décisionnelle DTS par l’équipe historique

Slide 51

Slide 51

PHASE 4 : 2019 - 20?? AUTOMATISATION Jarvis VERS L’INFINI ET L’AU-DELA L’avenir

Slide 52

Slide 52

AUTOMATISATION Jarvis

Slide 53

Slide 53

DEPLOIEMENT CONTINU ● ● ● ● Intégration Continue Livraison Continue Déploiement continu jusqu’en recette MEP instrumentée (mais non continue)

Slide 54

Slide 54

LA PIC EVOLUE 2ème version des shared lib Jenkins: ● plus petites ● plus modulaires ● plus évolutives ● plus testables Sonarqube 7.x LTS ● Analyse multi-branches ● Décorations des PR xRay

Slide 55

Slide 55

Inn JARVIS … RENDRE LA PIC AUX DEVS ● ● ● ● ● Développement interne Boostrap de projets: ○ Jenkins ○ GitHub ○ Sonar ○ Seed Indicateurs projets Modification de projets Tâches administratives er s our ce

Slide 56

Slide 56

Bilan de la phase 4 (2019 - 20??) ● ● ● ● PLUSIEURS SHARED LIBs JARVIS AUTOMATISATION LIBERTÉS AUX DEVs ● ● ANGULAR ? ???

Slide 57

Slide 57

Slide 58

Slide 58

Slide 59

Slide 59

VERS L’INFINI ET L’AU DELA L’avenir

Slide 60

Slide 60

DEV to PROD ● ● ● Dev to production Qualimétrie et tests sur pull request GitHub Actions ?

Slide 61

Slide 61

OPENSHIFT ● ● ● ● ● Simplifier la PIC elle-même Simplifier le packaging & déploiement des applications Simplifier l’utilisation de nouvelles technos Rationaliser les machines Unifier les déploiements, l’administration et la supervision

Slide 62

Slide 62

DEVOPS ● ● ● ● Fluidifier les MEP et les relations dev et production Approche tool first, une bonne idée ? Cohabitation legacy et nouveaux projets DevSecOps ?

Slide 63

Slide 63

OUVERTURE DES TECHNOS ● ● La techno la plus adaptée au besoin ou au développeur Dans un environnement cadré et responsable

Slide 64

Slide 64

S’il ne fallait retenir que 2 ou 3 choses … ● Eviter de trop cadrer et restreindre les dévs au risque de passer son temps à jouer au gendarme et au voleur ● Impliquer les développeurs (inner source) ● Casser les silos ● Attention au “hype driven development” ● S’outiller pour les tâches ingrates (qualimétrie par exemple) ● Rationaliser les builds (sharedlib Jenkins)

Slide 65

Slide 65

MERCI !