Livraison Continue, avec l'outillage Devops (Jenkins, Docker ...

Post on 03-Jan-2017

239 views 2 download

Transcript of Livraison Continue, avec l'outillage Devops (Jenkins, Docker ...

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