DIGITAL EXPERIENCEBORDEAUX // 2018
L’événement de l’intelligence numérique de la région Aquitaine
DevOps & containers :l’équation d’une infrastructure-as-a-codeNicolas YUEN - MicrosoftChristophe HERAL – Neotech Solutions
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Principe n°3 du manifeste Agile
• « Livrez fréquemmentun logiciel opérationnelavec des cycles de quelques semainesà quelques moiset une préférencepour les plus courts. »
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Loi de Conway
« Les organisations qui définissent des systèmes ... sont contraintes de les produire sous des designs qui sont des copies de la structure de communication de leur organisation » Melvin Conway – 1968
« L’organisation des équipes a un effet direct sur le code que l’on produit » Clément Rochas
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Combien de temps pour déployer ?
How long would it take your organization to deploy a change that involved just one single line of code?Do you do this on a repeatable, reliable basis.
Mary Poppendieck – Implementing Lean Software Development
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Value Stream Map
© Paul Stack
TempsTemps efficace: 7h15
vsDélai de mise en prod: trop…
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Dev / ops : 2 objectifs opposés
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Peur de la mise en prodPlutôt rare
Þ Pas d’entraînement Þ Manque de confiance
Un gros volume Þ Plus de risques
Nécessite l’intervention humaine
Les interdictions de livrer le vendredi
DIGITAL EXPERIENCEBORDEAUX // 2018
L’événement de l’intelligence numérique de la région Aquitaine
DevOps
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Le mouvement DevOps
• Cycles courts jusqu’à la mise en production• Culture + pratiques + technologie• Faire parler les devs et les opsÞ Nécessite de casser les silos organisationnels• Processus de livraison rapide, fiable et répétableÞ Industrialiser et automatiser la mise en production• Nécessite la mise en place d’architectures scalables et
évolutives
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Un impact sur l’organisation« You build it, you run it »
Source : http://thenextweb.com/insider/2011/10/05/amazons-cto-amazon-is-a-technology-company-we-just-happen-to-do-retail/
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
D’abord se reposer sur les pratiques de dév
Contrôle de sources
Intégration continue
Processus de build
Tests d’acceptation
Tests unitaires automatisés
Featureflipping
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
L’intégrationcontinue –Le principe
Récupération des sources
Compilation
Génération des binaires
Exécution des tests automatisés
Analyse de code
Définition :“Processus automatisé qui compile, teste, génère et analyse une application”
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
L’intégration continue - Les avantages
Intégration du code de tous les développeurs Þ Détecte immédiatement les effets de bordsExécution lors de chaque changement de code source Þ Fournit un retour immédiat aux développeursLancer souvent la compilation du projet (plusieurs fois par jour)Maintenir un contrôle de source uniqueTester sur un autre environnement que celui de développementFacile pour quiconque d'obtenir le dernier déploiement exécutable
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Tests d’acceptationBasé sur un langage de spécification des scénarios utilisateurs : Gherkin
User Story : « En tant qu’utilisateur, je veux me connecter à Google afin d’accéder à tous mes services en ligne »Scénario 1 : Accéder à la page de connexion
Given L’utilisateur n’est pas connectéAnd L’utilisateur est sur la page d’accueil GoogleWhen L’utilisateur demande à se connecterThen La page de connexion est affichée
Scénario 2 : Se connecter …
Un outil introduit un mécanisme entre les conditions exprimées en langage fonctionnel par les gens du métier et le code technique
Tests fragiles : définir des seuils en fonction de la criticité de la feature testée
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Behaviour Driven Development / SpecFlowFramework Open-Source de BDD en .NET. Compatible MSTest, NUnit…S’installe comme un template Visual Studio (fichier .feature)
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Feature FlippingActivation/désactivation de fonctionnalité en production sans relivraison de code
(Possible aussi via AOP)
Contrairement au feature branching, la branche est dans le code.Stocké en base de données/configuration et modifiable à chaud
Nécessite de tester avec feature activée ET désactivéeNe pas oublier de nettoyer le code après l’activation (ou pas) définitive
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
8 principes de Continuous Delivery
Process répétable à l’infini
Si quelque chose est difficile, faites-le plus souvent
Automatisez TOUT
Garder tout dans le contrôle de sources
« Fini » signifie « Mis en production »
Tester pour garantir la qualité
Tout le monde est concerné par la MEP
Améliorez le process en continu
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
4 pratiques de Continuous Delivery
Compiler ses binaires une fois et une seule
Utiliser exactement le même mécanisme pour déployer dans tous les environnements
Effectuer des « tests de fumée » de votre déploiement
Si quelque chose échoue, annuler le déploiement
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Continuous Delivery
Issu du livre de JezHumble et David Farley : Continuous Delivery
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Un impact sur l’architecture
Complexité à déployer en continu un monolitheTout bug peut affecter l’ensemble du systèmeNécessite un rollback complet du déploiement
Alternatives : développement de micro-servicesÞ Systèmes petits et autonomesÞ Déploiement automatiséÞ Faciles à scaler
DIGITAL EXPERIENCEBORDEAUX // 2018
L’événement de l’intelligence numérique de la région Aquitaine
Les conteneurs
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
23
con·tain·erkənˈtānər/nounan object that can be used to hold or transport something.
a large metal box of a standard design and size used for the transportation of goods by road, rail, sea, or air
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Qu’est ce qu’un conteneur ?
� Virtualisation d’OS� Perception d’environnement isolé et
indépendant� Package déclaratif� Unité de déploiement « universelle »� Initialement idéal pour le développement et les
tests mais désormais prêt pour la production
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
26
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
27
Transport de marchandises avant les années 60
Multiplicité des marchandises
Est ce que je m’inquiète de
l’interaction entre marchandises?
Multiplicité des méthodes de
transport et de stockage
Est ce que je peux transporter
rapidement et de manière fluide?
Le conteneur de transport a apporté une solution
Multiplicité des marchandises
Est ce que je m’inquiète de
l’interaction entre marchandises?
Multiplicité des méthodes de
transport et de stockage
Est ce que je peux transporter
rapidement et de manière fluide?
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
31
Le conteneur logiciel apporte une solution
32
Multiplicité des piles applicatives
Est ce que les services et
applications interagissent de
manière appropriée ?
Multiplicité des plateformes
matérielles ou virtuelles
Est-ce que je peux migrer rapidement
et de manière fluide?
User DB
QA server
DevelopmentVM
Contributor’slaptop
Customer Data Center
Production Cluster
Public Cloud
Staticwebsite
nginx 1.5 + modsecurity + openssl + bootstrap 2
Web frontendRuby + Rails + sass + Unicorn
QueueRedis + redis-sentinel
Analytics DB
hadoop + hive + thrift + OpenJDK
Le conteneur logiciel apporte une solution
33
Multiplicité des piles applicatives
Est ce que les services et
applications interagissent de
manière appropriée ?
Multiplicité des plateformes
matérielles ou virtuelles
Est-ce que je peux migrer rapidement
et de manière fluide?
User DB Analytics DB
QueueWeb frontend
Static website
QA serverDevelopmentVM Contributor’s
laptop
Customer Data Center Production ClusterPublic Cloud
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Un peu d’histoire sur les conteneurs
� Conteneur = unité de transport intermodal
� Virtualisation de processus� UNIX chroot (1979-1982)� BSD Jail (1998)� Parallels Virtuozzo (2001)� Solaris Containers (2005)� Linux LXC (2008)� Docker (2013)
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Docker
� Solution pour manipuler des conteneurs � Modèle avec architecture de type client / serveur
� Client Docker� Moteur Docker� Communication client / serveur avec des appels en REST
� Ensemble de commandes � Décrire l’image d’une application à déployer dans un conteneur� Publier l’image dans une Registry (dépôt d’images public ou privé)� Interroger une Registry� Gérer les versions des images dans une Registry� Déployer des images…
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Docker et Microsoft – une longue histoire� Docker dans Azure
� Extension Docker pour les VM Linux
� Azure Container Instance (ACI)
� Azure Kubernetes Services (AKS)
� Azure Container Registry (ACR)
� Azure Functions (Serverless)� Azure Logs Analytics : Container Solution Monitoring
� Docker sur Windows Server 2016 / Windows 10� Docker CLI pour gérer les conteneurs Windows et les conteneurs Hyper-V
� Outillage� Visual Studio 2015 et ultérieur : plug in pour Docker
� Visual Studio Code : extensions pour Docker
� Visual Studio Team Services
DIGITAL EXPERIENCEBORDEAUX // 2018
L’événement de l’intelligence numérique de la région Aquitaine
Infrastructure as Code
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Quelques concepts importants
Pet vs Cattle
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Mutable vs Immutable
Quelques concepts importants
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Infrastructure as Code (IAC)
� L’Infrastructure As Code est un type d'infrastructure que les équipes IT (disons plutôt DevOps) peuvent administrer et mettre à disposition automatiquement, via du code, plutôt qu'en recourant à un traitement manuel
� Cela nécessite de modéliser les briques d’infrastructure sous la forme de fichiers déclaratifs qui sont stockables comme du code
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
IAC - quelques bases� Code déclaratif : Permet de déclarer « Voici ce que je
souhaite créer » � Description de l’état finale souhaité
� Code impératif : Séquence de commandes de programmation pour créer / configurer un système� Exemples : scripts Bash ou PowerShell
� En Infrastructure as Code, on va utiliser du déclaratif car cela garantit une idempotence et simplifie la gestion du cycle de déploiement
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Infrastructure as Code et dépôt de code
� C’est de l’infrastructure et c’est aussi une forme de code� Il est donc possible de stocker ces fichiers dans des
dépôts de code source historiquement utilisés par les développeurs pour leurs codes applicatifs
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Infrastructure as Code – Quelques outils
Azure ARM Terraform Ansible
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Exemple Infra as Code – Conteneurs dans Azure
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Infrastructure as Code – Cas d’usage
� Automatiser la création des environnements (Dev / Staging / PreProd / Prod)
� Eviter les divergences d’environnement
� Garantir et tester la validité des environnements
� Utiliser l’infrastructure as code pour documenter l’infra
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
3rd party integrationPIM / external Data
Data LayerRedis CacheWeb AppLoad BalancerCDN
User
Infrastructure
Search
Media Services
Service Bus
DIGITAL EXPERIENCE BORDEAUX // 2018#DigitalExperienceBordeaux
Merci !