10 ans d’usine logicielle Du petit garage à l’industrialisation #TNT19
Slide 2
Qui suis-Je ? Architecte logiciel Développeur Java Geek Agilité & Scrum @HM depuis 11 ans
1999
2004
2006
2008 www.linkedin.com/in/philippartStephane
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
Slide 5
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
Slide 6
Big Bang 2008 ⇒ 2010
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
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
Slide 9
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
Slide 10
Support à l’installation du poste de développement
Slide 11
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 12
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
Slide 13
Librairies Transverses ● ●
●
Faciliter l’application des normes Début de factorisation de code dans des librairies maison Maintenance des shared-lib Weblogic
Slide 14
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
Slide 15
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, …)
Slide 16
JEE5, JSF, EJB … dans Weblogic ● ● ● ●
EAR … ouch La promesse (ou les mensonges) de JSF Tomahawk Stuck Threads
Slide 17
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
Slide 18
BO & DTS ● ● ●
Legacy, vous avez dits legacy ? « Administration » Pas d’intégration dans la PIC
Slide 19
Etabli
SVN Shared Lib WLST (jpython) Revues de code manuelle Moultes procédures et normes
Slide 20
Débuts de l’industrialisation
Slide 21
Gestion des sources ● ● ● ● ● ●
Subversion Gestion des droits Tortoise SVN Sauvegarde avant tout Début de la culture du commit Centralisation et distribution
Slide 22
Shared Lib & WLST ● ●
N’avoir qu’un jeu de lib externes Déploiement et administration « automatiques »
Slide 23
Revue de code et procédures ● ● ● ●
Pas d’outils Beaucoup de doc Beaucoup d’énergie Beaucoup de frustration
Slide 24
De l’Atelier de quartier vers l’usine 2010 ⇒ 2014
Slide 25
JEE forever
● ●
JEE6 PrimeFaces & jQuery
Slide 26
Outillage Chez Casto il y a tout ce qu’il faut !
● ● ● ● ●
Une vraie équipe d’exploitation Jenkins Sonar Nexus Maven avancé
Slide 27
La production ce n’est pas pour les rigolos ● ●
Enfin une vraie exploitation Recentrés sur les environnements de développement
Slide 28
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 29
nexus ● ● ● ● ●
Repository Maven Ne pas tout exposer Simplifier la configuration Une mémoire de nos applications Proxy vers l’extérieur
Slide 30
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
Slide 31
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 32
Vieux cons …
Slide 33
Gigafactory
2014 ⇒ de nos jours
Slide 34
Nouvelle Organisation
● ● ●
Architectes applicatifs Architectes logiciels CI / CD
Slide 35
Quand je serais grand je serais … ● ●
●
Accompagnement projets Recentrage sur l’architecture logicielle Boost de la PIC
Slide 36
Git & GitHub ● ● ● ● ● ● ● ●
Remplacer SVN Equipes en France RSSI ADFS SaaS Pas de WebHook Pas de migration Administration light
Slide 37
Portail
Slide 38
Feature branches
Slide 39
Issues et Pull Request
Slide 40
Jenkins multi-branches
Slide 41
Jenkins 2 Sérieux du groovy ???
● ● ● ● ●
Pipelines Shared lib Du vrai « as code » Factorisation Migration
Slide 42
Groovy … ou le syndrome de Murtaugh
Slide 43
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
Slide 44
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
Slide 45
Pipeline – GitHub
Slide 46
Pipeline – Projet / DSL
Slide 47
Pipeline – Jenkinsfile
Slide 48
Sonarqube Fidèle au poste
● ● ●
Passage à la 6.7 LTS Simplification Outch l’analyse multi-branches
Slide 49
Dashboard
Slide 50
Drill down jusqu’à l’anomalie
Slide 51
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
Slide 52
AU revoir … Et merci Nexus ● ● ●
Nexus 2 vieillissant Version Pro X (24/7 + XRay) Support efficace
Slide 53
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
Slide 54
Configuration d’un gestionnaire de dépendances
Slide 55
Browser de dépendances
Slide 56
L’avenir ● ● ● ● ●
Architecture plus robuste Docker Promotion Xray Ouverture vers de nouveaux types de repositories (CRAN, Conan, …)
Slide 57
Deploy Hack & Click vers le CD
● ● ● ●
Développement maison Automatiser ce qui peut l’être Faciliter les déploiements Normaliser les déploiements
Slide 58
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
Slide 59
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
Slide 60
Deploy en action
Slide 61
Web Services Fichiers, point à point vers le couplage lâche
● ● ● ●
SOA SOAP & REST ESB & API Gateway Couplage lâche & asynchronisme
Slide 62
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 !
Slide 63
ESB & API Gateway ● ● ● ●
TIBCO Broker JMS Robustesse Supervision
● ● ● ● ●
Exposition à l’extérieur Rationaliser les développements Composition Translations / transformations L’avènement du REST
Slide 64
Slide 65
Et après ? ● ● ● ●
Les micros-services Registry de services Un portail d’API Management transverse Encore plus d’automatisation et d’industrialisation
Slide 66
ELK Log me tender …
● ●
Du log et encore du log Premiers pas Docker
Slide 67
Log & Beauty ●
● ●
Un seul endroit pour tous les logs (JEE, ESB, Boot, …) Kibana Docker
Slide 68
Coding ? On veut coder !!!!
● ● ● ●
Printemps Angulaire Grosse Donnée DTS & BO
Slide 69
Spring … on respire ● ● ● ● ●
JEE trop rigide Emancipation des développeurs Spring* Fat jar Ouverture vers les micros services et Docker
</ >
Slide 70
2.X Spring*
4.X
Slide 71
Seeds & Frameworks
Slide 72
Angular … C’est cool, euh vraiment ? ● ● ● ●
Remplacer JSF / jQuery Avoir des applications Web riches Emancipations des développeurs Angular*
Slide 73
Seeds & Frameworks
Slide 74
C’est cool quand c’est simple ☺
Slide 75
1.X
Angular*
2.X, 4.x et 6.X
Slide 76
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
Slide 77
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
Slide 78
Accès aux données
Préparation du modèle
Analyse des données
dataLab
Supervision
Slide 79
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
Slide 80
Au final c’est plutôt pas mal :)
Slide 81
Slide 82
Demain ?
Slide 83
Vers l’infini et l’au delà Portail, automatisation, docker, devops, ouverture des technos, …
Slide 84
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
Slide 85
Automatisation ● ● ● ●
Dev to recette Dev to production Builds sur changement de code Qualimétrie et tests sur pull request
Slide 86
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
Slide 87
DevOps ●
●
Permettre aux équipes d’avoir les outils nécessaires Cohabitation legacy et nouveaux projets
Slide 88
Ouverture des technos ●
●
La techno la plus adaptée au besoin ou au développeur Dans un environnement cadré et responsable