Contexte
Dans un contexte fortement disruptif où chaque entreprise est contrainte de satisfaire de façon efficiente aux besoins des clients, il est important de repenser l’approche de livraison des applications. Ces dernières doivent être sujettes à un certain nombre de facteurs parmi lesquels :
- La capacité à fournir à ses utilisateurs les fonctionnalités attendues
- La disponibilité pour ses utilisateurs, quel que soit l’endroit où ils souhaitent l’utiliser
- L’évolution rapide dans le temps afin de fournir les fonctionnalités pertinentes à ses utilisateurs
- La production des résultats commerciaux escomptés pour les organisations
Cependant avec l’adoption de l’agilité, la fréquence de livraison de nouvelles fonctionnalités par les équipes de développement augmente et par conséquent le nombre de changements introduits dans le système aussi. Ce qui constitue un risque majeur dans la stabilité des systèmes avec un impact direct dans l’expérience client. En outre, les équipes opérationnelles s’exposent à une charge de travail intense pouvant aboutir à un goulot d’étranglement, en raison des tests requis avant la mise en production des livraisons multiples. Ce qui peut ralentir le cycle de déploiement et créer de la frustration entre équipes mais aussi du côté des clients.
Historique
C’est dans ce contexte, que le mouvement de DevOps a émergé vers 2009 en réponse aux conflits inhérents entre plusieurs déploiements fréquents et la stabilité du système. En effet, les équipes informatiques opérationnelles et de développement ont exprimé leurs inquiétudes quant au modèle traditionnel de développement, dans lequel les développeurs travaillaient à l’écart des équipes opérationnelles chargées de déployer le code et d’en assurer le support. Le terme DevOps, qui combine les mots « développement » et « opérations », reflète le processus d’intégration de ces disciplines en un processus continu.
Définition
Il n’existe pas de définition unanime sur le concept DevOps. Il en existe plusieurs parmi lesquelles, nous pouvons noter :
- “DevOps est un ensemble de pratiques multidisciplinaires consacrées à l’étude de la construction, de la maintenance évolutive et de l’exploitation des systèmes informatiques de toutes tailles, qui doivent pouvoir être modifiés rapidement sans défaillir” Selon Jez Humble, co-fondateur de startup DevOps Research and Assessment LLC
- “DevOps repose de façon sous-jacente sur la philosophie présente dans le Manifeste agile, qui met l’accent sur les personnes (et la culture) et cherche à améliorer la collaboration entre les équipes de développement et de production. Ceux qui mettent DevOps en œuvre, entendent également faire un meilleur usage de la technologie, et surtout des outils qui permettent de disposer d’une infrastructure de plus en plus programmable et dynamique”, Selon Gartner
- “DevOps est un mouvement visant à réduire la friction organisationnelle entre les développeurs (charge de faire évoluer le S.I) et les opérationnels (chargés d’exploiter les applications existante)” Selon Wikipédia
Objectifs
L’adoption du DevOps peut-être corréler à plusieurs objectifs parmi lesquels nous pouvons noter :
- Augmentation de la collaboration
- Augmentation de la motivation des équipes
- Augmentation de la compétence des équipes
- Diminution des tâches à faible valeur ajoutée
- Augmentation de la qualité
- Diminution de la durée des cycles de livraison
- Réduction du Time To Market
- Maintien de la stabilité et de la fiabilité du système
- Intégration de la sécurité et de la qualité sur l’ensemble de la chaîne d’approvisionnement logicielle
- Visibilité pour les collaborateurs et le management
Principe
DevOps ne se limite pas à la collaboration entre les équipes de développement et opérationnelles. Cela va au-delà des outils et des pratiques. DevOps est un état d’esprit, un virage culturel, où les équipes adoptent de nouvelles méthodes de travail.
Dans une culture DevOps :
- Les développeurs se rapprochent de l’utilisateur en acquérant une meilleure compréhension de ses exigences et de ses besoins.
- Les équipes opérationnelles sont impliquées dans le processus de développement auquel elles ajoutent des exigences de maintenance et des besoins clients.
Cette culture implique l’adhésion aux principes clés suivants qui aident les équipes DevOps à livrer des apps et des services de qualité, plus rapidement que les organisations qui utilisent le modèle de développement traditionnel.
Principe 1 : Collaboration
DevOps repose principalement sur la collaboration. Les équipes de développement et opérationnelles s’unissent en une équipe fonctionnelle qui communique, partage du feedback et collabore tout au long du cycle de développement et de déploiement. Souvent, cela signifie que les équipes de développement et opérationnelles fusionnent en une seule équipe qui travaille sur l’ensemble du cycle de vie des applications.
Les membres d’une équipe DevOps sont chargés de garantir la qualité des livrables pour chaque aspect du produit. Ainsi, le développement est plus « full stack ». En effet, toutes les responsabilités liées à une fonctionnalité ou un produit, du ”Backend “et “Frontend”, incombent à l’équipe. Les équipes sont responsables d’une fonctionnalité ou d’un projet tout au long du cycle de vie, de l’état de concept à celui de produit livré. Ce niveau accru d’investissement et d’attachement de la part de l’équipe permet d’obtenir des résultats de meilleure qualité.
Principe 2 : Automatisation
Une pratique DevOps essentielle consiste à automatiser autant que possible le cycle de vie du développement logiciel. Les développeurs ont ainsi plus de temps pour écrire du code et développer de nouvelles fonctionnalités. L’automatisation est un élément clé qui permet de réduire les erreurs humaines et augmente la productivité des équipes.
Grâce à des processus automatisés, les équipes parviennent à une amélioration continue avec des durées d’itération courtes, ce qui leur permet de répondre rapidement au feedback client
Principe 3 : Amélioration continue
L’amélioration continue est un fondement des pratiques Agile et de la fabrication Lean. Elle consiste à se concentrer sur l’expérimentation, la réduction des gaspillages et l’optimisation de la vitesse, du coût et de la facilité de livraison. Elle est également liée à la livraison continue. Cette dernière permet aux équipes DevOps d’envoyer continuellement des mises à jour qui optimisent les systèmes logiciels.
La conséquence de ce pipeline constant de nouvelles versions est que les équipes envoient des changements de code de façon cohérente. Ainsi, elles éliminent le gaspillage, optimisent le développement et apportent davantage de valeur au client.
Principe 4 : Action centrée sur le client
Les équipes DevOps utilisent des boucles de feedback courtes avec les clients et les utilisateurs finaux. Ainsi, elles développent des produits et des services centrés sur les besoins des utilisateurs.
Les pratiques DevOps permettent de recueillir du feedback utilisateur et d’y répondre rapidement grâce à une surveillance en temps réel et à un déploiement rapide. Les équipes obtiennent une visibilité immédiate sur la façon dont les utilisateurs interagissent avec un système logiciel et utilisent ces informations pour développer de nouvelles améliorations.
Principe 5 : Prenez en considération la finalité
Ce principe implique de comprendre les besoins des clients et de créer des produits ou services qui résolvent des problèmes réels. Les équipes ne devraient pas développer en vase clos ou créer des logiciels en se fondant sur leur utilisation hypothétique par les consommateurs. Les équipes DevOps doivent plutôt avoir une compréhension holistique du produit, de sa création à son implémentation
Les pratiques essentielles du DevOps
Les pratiques DevOps évoluent de façon continue permettant aux entreprises de se performer dans la réinvention du cycle de vie logiciel.
Intégration Continue
Dans une équipe agile, nous pouvons avoir entre 5 et 9 développeurs qui travaillent sur différentes parties du code d’une même fonctionnalité. A cet effet, des problèmes d’intégration peuvent se poser. Afin d’éviter leur identification tardive, l’approche de l’intégration continue est adoptée. Elle consiste à :
- Utiliser un système de contrôle de version pour maintenir le code source
- Tracker les changements apportés sur le code
- Exécuter la construction et les tests autant de fois qu’il y’a évolution du code
Le chapitre 6 est consacré à l’accélération des développements grâce à l’intégration continue. Le chapitre 10 présente des solutions PaaS qui simplifie l’intégration continue
Automatisation des tests
L’un des principe clé du DevOps est l’automatisation qui s’applique également aux tests. Il existe plusieurs types de tests qui peuvent être automatisés : tests unitaires, tests de qualité, tests de régressions, tests fonctionnels, tests de performance, etc.
Le chapitre 7 présente les mécanismes d’inclusion de la qualité, la sécurité dans les produits alors que le chapitre 9 aborde l’amélioration de l’expérience utilisateur grâce aux tests de performance.
Déploiement / Livraison Continue
Cette pratique est en phase avec les principes agiles qui consistent à livrer de façon continue et incrémentale les fonctionnalités et à recevoir très tôt des feedbacks utilisateurs. Il existe plusieurs stratégies de déploiement du logiciel : Blue/Green, Canary, etc.
Le chapitre 8 explique les aspects essentiels qui aident à fluidifier les déploiements et les livraisons de façon continue.
Infrastructure as Code (IaC)
Avant l’IAC, les admins approvisionnaient l’infrastructure manuellement ou à l’aide de scripts. Cependant, cette approche est souvent chronophage, et gère difficilement la complexité lors de la scalabilité de l’infrastructure et de la maintenance des scripts. L’IAC élimine ainsi tous ces problèmes en automatisant le provisioning et la gestion de l’infrastructure grâce une approche déclarative via du code.
Le chapitre 03 présente l’automatisation de l’infrastructure avec Terraform.
Conteneurisation
L’approche d’une infrastructure immutable consiste à garder l’intégrité d’un composant une fois configuré et déployé. En cas de changement, une nouvelle configuration est requise. C’est le cas de la virtualisation applicative avec les conteneurs qui permet de packager l’application et tout ce qui permet son exécution dans un artefact portable.
Le chapitre 02 permet de naviguer dans l’univers des conteneurs Docker et le chapitre 04 présente les mécanismes de gestion des conteneurs à l’échelle grâce à l’orchestration.
Gestion de la configuration
La gestion de la configuration est un processus d’ingénierie des systèmes qui aide les entreprises à maintenir la qualité des performances et le fonctionnement d’un produit, d’un système ou d’un autre actif informatique donné tout au long de son cycle de vie.
Il permet ainsi dans l’écosystème DevOps à standardiser et versionner les configurations.
Le chapitre 5 présente la gestion de la configuration avec Ansible
Monitoring
La supervision en temps réel permet de suivre et de mesurer les performances et l’état de santé des systèmes et des applications, de façon à identifier et à corriger les problèmes de manière précoce. Il permet également d’anticiper dans l’apparition de dysfonctionnement et garantir ainsi la fiabilité du système.
Le chapitre 11 présente quelques mécanismes permettant d’anticiper sur les pannes grâce à la supervision.
Il existe d’autres pratiques comme le chaos engineering, la gestion des secrets, le serverless, etc. qui ne seront pas abordés dans le cadre de ce cours.
Présentation du Lean Manufacturing
DevOps se présente comme l’application à l’informatique des principes du Lean Manufacturing qui s’appuie sur les piliers suivants :
- Le juste à temps (encore appelé « First Way ») , en charge de la productivité qui emmène le flux de travail du développement à la production
- Le Jidoka ou l’autonomisation, en charge des actions spécifiques de construction qui assure la boucle de contrôle et prévient les défauts.
- Le kaizen, en charge de l’amélioration continue L’objectif du Lean Manufacturing (mis au point par Toyota) est d’atteindre la meilleure qualité, les coûts les plus bas, les délais les plus courts et la meilleure sécurité dans la production d’objets manufacturés
Les éléments Lean du DevOps
- La chaîne de valeur (productivité)
- La suppression des goulets d’étranglement
- La suppression des gaspillages
- La diminution de la taille des lots jusqu’au pièce à pièce
- L’arrêt au premier défaut
- Les unités autonomes de production
Framework CALMS
Le framework CAMLS est une méthodologie stratégique pour la mise en œuvre de DevOps à l’échelle de l’entreprise, introduite pour s’assurer que les pratiques DevOps s’alignent sur les objectifs métier.
C’est également une offre une approche structurée pour réussir une transformation à grande échelle en insistant sur des principes souvent négligés comme la culture et le partage.
Les composantes de CALMS sont :
1. Culture
Via une approche collaborative, il est nécessaire d’impulser un changement organisationnel pour favoriser le partage d’informations, de pratiques, de processus, de responsabilité, etc.
Exemple :
- Intégration d’équipes cross-fonctionnelles
- Adoption des post-mortems sans reproche.
2. Automatisation
Pour une dynamique d’accélération des cycles de livraison et de réduire les erreurs humaines pouvant impacter la productivité, il devient nécessaire d’automatiser autant que possible les actions du cycle de vie d’un développement logiciel (construction, test, déploiement, supervision, etc.).
Exemple :
- Automation du déploiement logiciel
- Provisionning automatique de l’infrastructure
- Etc.
3. Lean
L’approche Lean de l’industrie a fortement influé sur l’application du DevOps dans le domaine de l’informatique. Cela apporte des points positifs tels que : l’optimisation des coûts, l’élimination du gaspillage, la maximisation de la valeur pour le client, etc.
Exemple :
- Cartographie de la chaîne de valeur
- Identification des goulots d’étranglement dans les processus
- Etc.
4. Mesure
« Vous ne pouvez pas l’améliorer si vous n’êtes pas capable de le mesurer » disait Peter Drucker, un consultant en management. Cette situation indique à l’importance d’avoir des mesures dans un processus d’amélioration. Ainsi, il est crucial d’identifier les KPI DevOps pour suivre l’impact et les améliorations.
Exemple d’indicateurs courants :
- Lead Time (délai de livraison)
- Mean Time To Recovery (MTTR)
- Fréquence de déploiement
- Etc.
5. Sharing
La promotion du partage de connaissances entre les équipes favorise l’adoption de bonne pratique à l’échelle ainsi que la standardisation des méthodes et processus. La mise place d’outils (wikis, messagerie instantanées, base de connaissance) contribue à la transparence et à une collaboration efficace.
Exemple :
- Atelier de partage
- Mentorat
- Base de connaissance
- Etc.
Quelques dérivés de DevOps
Avec l’évolution des besoins métiers et technologiques, DevOps s’est décliné en plusieurs spécialités pour répondre à des cas d’usage spécifiques (Sécurité, Data, Finance, etc.) et une complexité croissante des écosystèmes (multiplicité des outils). Dans la suite, nous allons brièvement présenter quelques dérivés sans trop rentrer dans les détails.
DevSecOps
Il favorise l’intégration de la sécurité dans le cycle DevOps avec le concept de “Shift Left Security” permettant de détecter les problèmes dès la phase de développement du produit. C’est une manière de faire de la sécurité l’affaire de tous et impliquer tous les acteurs dans l’adoption des bons réflexes en matière de sécurité. Cela pourrait réduire considérablement les dettes techniques en matière de sécurité.
Avec une approche DevSecOps, les tests de sécurité sont automatisés dans la chaîne d’approvisionnement de l’application. Voici quelques exemples de tests :
- SCA (Software Composition Analysis) : Détection des vulnérabilités dans les composants tiers : bibliothèques, Framework, etc.
- SAST (Static Application Security Testing) : Analyse du code source pour détecter les types de vulnérabilités et d’anti-modèles connus.
DataOps
La Data et de l’IA sont devenus incontournables dans les entreprises qui deviennent de plus en plus Data-Driven. Ainsi le DataOps permet d’améliorer la communication, l’intégration et l’automatisation des flux de données entre les gestionnaires et consommateurs de données au sein d’une organisation. Il vise à faciliter et accélérer la livraison d’analyses de données et de garantir que les données de l’organisation peuvent être utilisées de manière flexible et efficace.
A l’image du DevOps, il permet :
- L’automatisation des flux de données (extraction, transformation, gestion de la qualité, accès aux données, etc.)
- La surveillance des transformations de données
- Une collaboration efficiente entre spécialistes de la donnée et les opérationnels
- MLOps (Machine Learning Ops)
Il permet d’optimiser des cycles de vie des modèles d’apprentissage automatique et d’assurer que les modèles restent performants sur la durée.
A l’image du DevOps, il permet :
- L’automatisation des déploiements de modèles ML
- Le monitoring des performances des modèles en production
Rôle & responsabilités
Pour une réussite dans l’adoption du DevOps au niveau d’une entreprise, il est important de considérer certains rôles dans la restructuration des équipes. Nous allons dans la suite présenter quelques rôles ainsi que les responsabilités associées
- Ingénieur DevOps/DevSecOps : Il est responsable de la conception de la bonne infrastructure nécessaire aux équipes pour construire et livrer des produits en continu.
- Release Manager : Il est responsable de l’ensemble du cycle de vie des release, depuis la planification, l’ordonnancement, l’automatisation et la gestion des environnements de livraison continue
- Architecte DevOps : Il analyse les processus de développement de logiciels existants pour créer un pipeline DevOps CI/CD optimisé pour concevoir et livrer rapidement des logiciels
- Ingénieur sécurité et conformité : Il est responsable de la sécurité globale de l’environnement DevOps et travaille étroitement avec les équipes de développement pour concevoir et intégrer la sécurité dans le pipeline CI/CD
- Développeur logiciel : le développeur logiciel conçoit, programme et met en œuvre des applications et des progiciels pour répondre aux besoins spécifiques des utilisateurs grand public ou professionnels.
- Testeur logiciel : Le testeur de logiciel participe activement au processus de conception d’un logiciel en contribuant à l’élaboration du plan de test et en évaluant la qualité de ses composants. Son rôle essentiel est de repérer les défauts majeurs des logiciels tels que les bugs, les erreurs ou les pannes, afin de garantir le bon fonctionnement des systèmes développés
- Évangéliste DevOps : Pour qu’une organisation tire pleinement parti de DevOps, elle doit procéder à un changement culturel complet Il agit en tant qu’agent de changement, inspirant, éduquant et motivant les personnes de l’organisation à s’engager dans le voyage DevOps
Quelques Ouvrages utiles