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

A presentation at Touraine Tech in February 2019 in Tours, France by Stéphane Philippart

Slide 1

Slide 1

10 ans d’usine logicielle Du petit garage à l’industrialisation #TNT19

Slide 2

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

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

Slide 5

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

Slide 6

Big Bang 2008 ⇒ 2010

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

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

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

Slide 10

Support à l’installation du poste de développement

Slide 11

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

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

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

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

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

Slide 16

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

Slide 17

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

Slide 18

BO & DTS ● ● ● Legacy, vous avez dits legacy ? « Administration » Pas d’intégration dans la PIC

Slide 19

Slide 19

Etabli SVN Shared Lib WLST (jpython) Revues de code manuelle Moultes procédures et normes

Slide 20

Slide 20

Débuts de l’industrialisation

Slide 21

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

Slide 22

Shared Lib & WLST ● ● N’avoir qu’un jeu de lib externes Déploiement et administration « automatiques »

Slide 23

Slide 23

Revue de code et procédures ● ● ● ● Pas d’outils Beaucoup de doc Beaucoup d’énergie Beaucoup de frustration

Slide 24

Slide 24

De l’Atelier de quartier vers l’usine 2010 ⇒ 2014

Slide 25

Slide 25

JEE forever ● ● JEE6 PrimeFaces & jQuery

Slide 26

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

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

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

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

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

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

Slide 32

Vieux cons …

Slide 33

Slide 33

Gigafactory 2014 ⇒ de nos jours

Slide 34

Slide 34

Nouvelle Organisation ● ● ● Architectes applicatifs Architectes logiciels CI / CD

Slide 35

Slide 35

Quand je serais grand je serais … ● ● ● Accompagnement projets Recentrage sur l’architecture logicielle Boost de la PIC

Slide 36

Slide 36

Git & GitHub ● ● ● ● ● ● ● ● Remplacer SVN Equipes en France RSSI ADFS SaaS Pas de WebHook Pas de migration Administration light

Slide 37

Slide 37

Portail

Slide 38

Slide 38

Feature branches

Slide 39

Slide 39

Issues et Pull Request

Slide 40

Slide 40

Jenkins multi-branches

Slide 41

Slide 41

Jenkins 2 Sérieux du groovy ??? ● ● ● ● ● Pipelines Shared lib Du vrai « as code » Factorisation Migration

Slide 42

Slide 42

Groovy … ou le syndrome de Murtaugh

Slide 43

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

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

Slide 45

Pipeline – GitHub

Slide 46

Slide 46

Pipeline – Projet / DSL

Slide 47

Slide 47

Pipeline – Jenkinsfile

Slide 48

Slide 48

Sonarqube Fidèle au poste ● ● ● Passage à la 6.7 LTS Simplification Outch l’analyse multi-branches

Slide 49

Slide 49

Dashboard

Slide 50

Slide 50

Drill down jusqu’à l’anomalie

Slide 51

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

Slide 52

AU revoir … Et merci Nexus ● ● ● Nexus 2 vieillissant Version Pro X (24/7 + XRay) Support efficace

Slide 53

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

Slide 54

Configuration d’un gestionnaire de dépendances

Slide 55

Slide 55

Browser de dépendances

Slide 56

Slide 56

L’avenir ● ● ● ● ● Architecture plus robuste Docker Promotion Xray Ouverture vers de nouveaux types de repositories (CRAN, Conan, …)

Slide 57

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

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

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

Slide 60

Deploy en action

Slide 61

Slide 61

Web Services Fichiers, point à point vers le couplage lâche ● ● ● ● SOA SOAP & REST ESB & API Gateway Couplage lâche & asynchronisme

Slide 62

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

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 64

Slide 65

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

Slide 66

ELK Log me tender … ● ● Du log et encore du log Premiers pas Docker

Slide 67

Slide 67

Log & Beauty ● ● ● Un seul endroit pour tous les logs (JEE, ESB, Boot, …) Kibana Docker

Slide 68

Slide 68

Coding ? On veut coder !!!! ● ● ● ● Printemps Angulaire Grosse Donnée DTS & BO

Slide 69

Slide 69

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

Slide 70

Slide 70

2.X Spring* 4.X

Slide 71

Slide 71

Seeds & Frameworks

Slide 72

Slide 72

Angular … C’est cool, euh vraiment ? ● ● ● ● Remplacer JSF / jQuery Avoir des applications Web riches Emancipations des développeurs Angular*

Slide 73

Slide 73

Seeds & Frameworks

Slide 74

Slide 74

C’est cool quand c’est simple ☺

Slide 75

Slide 75

1.X Angular* 2.X, 4.x et 6.X

Slide 76

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

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

Slide 78

Accès aux données Préparation du modèle Analyse des données dataLab Supervision

Slide 79

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

Slide 80

Au final c’est plutôt pas mal :)

Slide 81

Slide 81

Slide 82

Slide 82

Demain ?

Slide 83

Slide 83

Vers l’infini et l’au delà Portail, automatisation, docker, devops, ouverture des technos, …

Slide 84

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

Slide 85

Automatisation ● ● ● ● Dev to recette Dev to production Builds sur changement de code Qualimétrie et tests sur pull request

Slide 86

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

Slide 87

DevOps ● ● Permettre aux équipes d’avoir les outils nécessaires Cohabitation legacy et nouveaux projets

Slide 88

Slide 88

Ouverture des technos ● ● La techno la plus adaptée au besoin ou au développeur Dans un environnement cadré et responsable

Slide 89

Slide 89