12 ans d’usine logicielle Du petit garage à l’industrialisation
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
Disclaimer Du vrai “c’était mieux avant” (ou pas) Du vrai troll Du vrai “ah ouais on faisait ça aussi avant”
Slide 4
HARMONIE MUTUELLE EN BREF
4,8 M
De personnes protégées
5000
collaborateurs
Dont 5°° Dans l’IT
Slide 5
PHASE 1 : 2008 - 2010 LA GÉNÈSE Vous avez dit legacy ?
LE 1er ESSAI L’établi
Slide 6
LA GÉNÈSE Tout a un début !
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
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
JEE5, JSF, EJB … dans Weblogic ● ● ● ●
EAR … ouch La promesse (ou les mensonges) de JSF Tomahawk Stuck Threads
NORMES & BONNES PRATIQUES ● ●
Principalement sur le développement (très peu sur la conception & l’architecture) Articles dans un Wiki (mediawiki)
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
ECLIPSE vs INTELLIJ ● ● ●
Bataille de clochers Maven au secours !! Ne plus dépendre de l’IDE
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
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
L’ÉTABLI 1er essai
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
GESTION DES SOURCES ● ● ● ● ●
Gestion des droits Tortoise SVN Sauvegarde avant tout Début de la culture du commit Centralisation et distribution
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
REVUE DE CODE (et procédures) ● ● ● ●
Pas d’outils Beaucoup de doc Beaucoup d’énergie Beaucoup de frustration
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
PHASE 2 : 2010 - 2014 UPGRADE Atelier de quartier
Slide 23
JEE forever … ● ● ● ●
JEE6 PrimeFaces & jQuery Essayer de suivre plus rapidement les évolutions Rendre les devs plus “heureux”
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
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
NEXUS ● ● ● ● ●
Repository Maven Ne pas tout exposer Simplifier la configuration Une mémoire de nos applications Proxy vers l’extérieur
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
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
Bilan de la phase 2 (2010 - 2014) ● ● ● ●
PROD JENKINS NEXUS SONAR
● ● ● ●
JEE JENKINS SONAR POM ENTREPRISE
Slide 30
Slide 31
PHASE 3 : 2014 - 2019 SCALE Usine Logicielle
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
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
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
JENKINSFILE
Slide 36
SONARQUBE ● ● ●
Mise à jour (LTS) Utilisation des profils et quality gate Sonar Pas d’analyse de branches (payant)
Slide 37
AU REVOIR NEXUS … ET MERCI ● ● ● ●
Nexus 2 vieillissant Version Pro X (24/7 + XRay) Support efficace Ux
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
LOG ME TENDER ● ● ●
Stack ELK Un seul endroit pour tous les logs (JEE, ESB, Boot, …) Kibana
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
ET LE CODE ?
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
SPRING … ON RESPIRE ● ● ● ● ●
JEE trop rigide Emancipation des développeurs Spring* Fat jar Ouverture vers les micros services et Docker
</ 😃 >
Slide 44
SPRING*
1.5 puis 2.X
4.X
Slide 45
Inn
SEEDS & FRAMEWORKS
er s
our
ce
Slide 46
ANGULAR C’EST COOL … vRAIMENT ? ● ● ● ●
Remplacer JSF / jQuery Avoir des applications Web riches Emancipation des développeurs Angular*
Slide 47
Inn
SEEDS & FRAMEWORKS
er s
our
ce
Slide 48
C’EST COOL QUAND C’EST SIMPLE ☺
Slide 49
ANGULAR*
1.X
2.X, 4.X, 6.X, 8.X, 9.X et 10.X
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
PHASE 4 : 2019 - 20?? AUTOMATISATION Jarvis
VERS L’INFINI ET L’AU-DELA L’avenir
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
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
Bilan de la phase 4 (2019 - 20??) ●
●
●
●
PLUSIEURS SHARED LIBs JARVIS AUTOMATISATION LIBERTÉS AUX DEVs
●
●
ANGULAR ? ???
Slide 57
Slide 58
Slide 59
VERS L’INFINI ET L’AU DELA L’avenir
Slide 60
DEV to PROD ● ● ●
Dev to production Qualimétrie et tests sur pull request GitHub Actions ?
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
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
OUVERTURE DES TECHNOS ● ●
La techno la plus adaptée au besoin ou au développeur Dans un environnement cadré et responsable
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)