Upload
hoangtruc
View
236
Download
2
Embed Size (px)
Citation preview
Livraison en Continue, avec l’outillage Devops (Jenkins, Docker, Ansible et Nexus)
et Architectures Microservices
Karim Djaafar
Tech Leader of
Agenda
• Qui suis je ?
• Les bases de Devops et Notion de Livraison en Continue (ContinuousDelivery)
• Ingrédients d’un processus SDLC
• Configuration logicielle et Automatisation
• Conteneurs et MicroServices dans un processus Devops
• Refactoring d’une application monolithique JEE vers une architecture microservices
• Une démo pour terminer …
Qui suis je ?
• Architecte et Team leader de la Société de Conseil en ingénierie libreJasmine Conseil
• Auteur de nombreux ouvrages parus chez Eyrolles et d’Articles autourde l’IDE Eclipse et JBoss
• De nombreux projets menés autour de divers serveurs JEE(JBoss/Wildfly, WebSphere, TomEE…)
• Actuellement en charge du projet Devops et de l’industrialisation desenvironnements de recette et de déploiement au sein de l’equipeExpertise et support middleware d’EDF (France)
Les bases de Devops et ContinuousIntegration vs Continuous Delivery
Continuous Delivery
• Devops suppose un outillage compatible SDLC (SoftwareDevelopment Life Cycle) qui le supporte
Développeur ClientBuild Test release
SDLC
CI (Continous Integration) vs CD (ContinuousDelivery)
• Un processus CI s’assure que le livrable est stable et fonctionnel grâce a l’utilisation des tests automatises du code de l’application
• Livraison dans des cycles court des évolutions et une remontée rapideen cas de problèmes via des notifications aux développeursconcernés
• Un processus CD est un processus beaucoup plus large qui va au delàdu code et englobe tout l’environnement nécessaire pour quel’application fonctionne (OS, réseau, serveur d’application, BD …)
Processus CD (Continuous Delivery): les étapes
Développeur Développeur
Référentiel de code
L’outil de CIsurveille lecode du dépôtet lorsqu’unchangementest détectélance lesétapes dupipeline
Le pipeline exécutedifférentes taches au seindu goal et vérifie que lecode fonctionne commerequis.
Les développeurscommitent leur code surla branche principale ousur la branche features.Plus tard les features de labranche seront fusionneesa la branche principale
Si une des étapeséchoue, le processus estavorté et une notificationd’échec est envoyé audéveloppeur qui aeffectue le commit
Si l’intégralité du pipeline s’executesans échec, le commit est promu a une release candidate qui nécessitera des vérifications complémentaires manuelles
Promotion Notification d’échec
Devops c’est quoi ?
• Dev : « Ca fonctionne chez moi ! »
• Ops : « C’est pas le serveur c’est le code ! »
Devops: réconcilier les développeurs et les opérationnels de l’infrastructure • Un état d’esprit, une culture qui
va plus loin que les outils
• Complémente la démarche Agileplus axe sur les devs
• Réduire le gap entre lesdéveloppeurs d’applications etles opérationnels en charge del’infrastructure et desdéploiement
Avantages
• Short Time to Market
• Les livraisons sont plus rapides, plus stables
• Meilleure collaboration entre les équipes de développement et lesopérationnels et le personnel en charge de la maintenance et dudéploiement opérationnel
• Meilleure intégration et prise en compte des évolutions fonctionnellesvoulues par le client
• Organisation optimisée
Les ingrédients d’un processus SDLC
Les outils devops
• Cloud Computing et PAAS (AWS, OpenShift,…)
• Gestionnaire de version a la base d’un processus CI (Github ou Bitbucket)
• Infrastructure de “code”: Ansible ou Puppet pour la gestion des serveurs centralisee
• Build/Test et CI: Jenkins
• Architecture conteneurisee (Docker) vs Virtualisee (VirtualBox)
• Microservices (voir plus loin)
L’outillage Devops et SDLC
Docker compose
Configuration logicielle et Automatisation
Provisioning vs Gestion de la configurationApplication Déploiement (installation et
Configuration du logiciel et de l’applicatif dans la machine provisionnée
Serveur Physique
Hyperviseur / Conteneur
API Provisioning (création des Machines avec OS et logiciel)
Serveur Web
Config Config
Java Automatisation et Gestion de configuration
OSLC et le cycle provisioning et déploiement
Développeur ClientBuild Test release
Provisioning
Déploiement
Vagrant• Un outil en ligne de commande écrit en Ruby
• Out-of the Box avec le support de Virtualbox
• Pour provisionner une machine Ubuntu 14.04 on lancera par exemple la commande suivante:
• Puis lancer ssh dans la nouvelle machine ainsi construite:
• Puis une fois la machine utilisee, vous pouvez la détruire par la commande
Ansible: les principes
• Orchestrer et automatiser les taches d’administration système
• Provisionner des machines
• Déployer des applications
Installer Ansible
Pré requis:
• Installer python et la dernière version du package pip (systeme de gestion de paquets de Python)
$ brew install python (version recommandée 2.7.10)
$ pip install pip –upgrade
• Installer Ansible et support AWS en ligne de commande$ pip install ansible --upgrade
$ pip install awscli
Inventory
Ansible: Architecture et Flux
Playbook
Modules
AnsibleConfig
Pyth
on
SSH
Ansible
Inventory:192.168.0.1192.168.0.2
SSH private key
Server 1 192.168.0.1
SSH public key
Server 2192.168.0.2
SSH public key
Connexion SSH sur l’hôte distant
.ssh/authorized_keys
Une Démo ?
Quelques commandes Ansible avec Vagrant
Provisionner des machines
Notion de Microservices et de Conteneurs
Des concepts qui font le buzz, Docker
• Un sujet « dans le vent » qui révolutionne la manière de concevoir et de packager du logiciel
• Docker une évolution du container qui offre:
Bu
ild
Le packaging d’une application et de ses dépendances dans un container
Ship
Le déplacement facilite du container d’une machine a une autre
Ru
n
Lancer le container, c’est a dire l’application qu’il contient
An
yA
pp
Tout ce qui peut tourner sous Linux
Docker vs Java
• Java est WORA (Write Once Run everywhere), Docker est PODA(Package Once Deploy Antwehere)
Quelques définitions: Un conteneur
• Une application, ou une image en cours d’ execution
• Les processus, le réseau, la configuration
• Pas une VM
Image vs Conteneur
Image Docker runRunning
Container
Les Microservices dans les Architectures Devops
Microservices, c’est quoi ?
Caractéristiques clés• Comme SOA, mais avec quelques « subtiles » différences:
• Pousse par la « vague » des conteneurs Docker, des infrastructures de type PAAS, etc.…
• Pousse aussi par les principes Devops et CI/CD
• Un microservice fait une seule chose et est responsable que d’une seulefonctionnalité
• Chaque microservice peut être construit par un ensemble d'outils ou delangage puisque chacun est indépendant des autres
• Un microservice est très faiblement couple
• Indépendance des équipes développant différent micro service
• Test plus facile et déploiement de type CD
• En général se base sur un style RESTFUL (pas obligatoire)
Les microservices, oui mais pourquoi faire ?
• Les besoins IT augmentent et se complexifient
• Les clients sont de plus en plus exigeants
• Les exigences du Continuous Delivery pipeline:• Livrer rapidement
• Déployer facilement des portions de code
• Les exigences d’évolutivité de l’architecture• Évoluer plus facilement vers d’autres frameworks ou langages
Application monolithique
Nœud 1
UI
Couche métier
DAO
BD
• Un Design classique en couchesqui convient a des petitesapplications et proposant unebonne répartition des rôles
• Assez complexe a maintenir et adéployer avec le temps
• Difficultés d’introduire denouveaux frameworks (exempleAngularjs)
Application monolithique avec denombreuses fonctionnalités
Fonct. UI Fonct. UI Fonct. UIFonct. UI
UI
Fonct. Metier Fonct. Métier Fonct. MétierFonct. Métier
Business Layer
Fonct. DAO Fonct. DAO Fonct. DAOFonct. DAO
DAO
Une scalabilite médiocre
Nœud 1
UI
Couche métier
DAO
BD
Nœud 1
UI
Couche métier
DAO
BD
Nœud 1
UI
Couche métier
DAO
BD
Load Balanceur
Node-03Node-02Node-01
Quelques avantages …
• Typiquement package dans un seul .ear
• Facile a tester (tous les services sont disponibles)
• Développement facilite
Une architecture microservice
Internet Application 1 Internet Application 2
Micro
service 1
Micro
service 2
Micro
service 3
Micro
service 4
Refactoring d’une Architecture Monolithique vers une
Architecture microservices
Refactoring de la Base : Etape 1
GUIServlets, Contrôleurs,
Managed BeansHTML, JavaScript, JSPs,
Templates...
Utilisateur Commande Catalogue
Après refactoring (Step 1): chaque microservice possède sa propre base
GUIServlets, Contrôleurs, Managed Beans HTML, JavaScript, JSPs, Templates...
Utilisateur Commande Catalogue
Architecture et Design : Step 2
• S’appuyer sur l’architecture REST pour l’exposition de son SI sous forme de web services
• Utiliser les patterns d’architectures (Agrégateur et Proxy notamment)
Pattern Aggregator
Service C
WAR
Service B
WAR
Service A
WAR
Service Agrégateur
Load
Balancer
Pattern Proxy
Service C
WAR
Service B
WAR
Service A
WAR
Service Proxy
Load
Balancer
Packaging JEE : Passer du WAR a l’EAR
• Décomposer en unité fonctionnel autonome, chaque module en module WAR au sein d’un EAR
Pages Web
Fichiers de configuration
Classes Java
WAR EAR
Pages Web
Fichiers de configuration
Dockerisation de l’application refactoree: Step 3
Pages Web
Fichiers de configuration
Classes Java
WAR
BD
Docker Pro and Cons
• PROS• Portabilité maximale
• Facile a créer et
• Démarrage des conteneurs
• CONS• Solution host centric
Une Démo ?
• Manipuler quelques commandes Docker
• Lancer l’usine logicielle avec Docker Compose (Nexus repository, Jenkins, GitHub…)
• Présentation de l’usine logicielle dockerisee
• Présentation de la solution Microservices JBoss Swarm, en version standalone et dockerisee
Merci pour votre attention