DevOps
Prof. KHALD
48 H
DEVOPS
DevOps est un concept qui vise à relever les défis associés au cycle
de vie traditionnel d’une application.
« DevOps est la conjugaison de personnes, de processus et de
produits qui permettent de fournir en continu de la valeur à nos
utilisateurs finaux. » – Donovan Brown
DEV & OPS
Introduction
Imaginons que vous travaillez pour une entreprise de développement de
logiciels dans le secteur de la vente au détail. Votre entreprise envisage de
migrer d’une ancienne application vers une nouvelle application.
Toutefois, l’équipe de développement et l’équipe des opérations ont des
objectifs contradictoires.
L’équipe de développement souhaite publier rapidement de nouvelles
fonctionnalités pour attirer davantage de clients, tandis que l’équipe des
opérations souhaite veiller à la stabilité et à la fiabilité de l’application.
Ce conflit provoque des retards dans la publication de nouvelles fonctionnalités
et des temps d’arrêt fréquents pour l’application.
Votre entreprise se rend compte qu’elle doit adopter des pratiques DevOps
pour surmonter ces défis et fournir des logiciels de haute qualité de manière
efficace et fiable.
DEVOPS
Définitions
DevOps est un ensemble de principes, de pratiques et de
valeurs qui ont pour objet d’améliorer les synergies entre les
équipes, avec pour objectif commun d’optimiser la livraison des
logiciels.
Il ne s’agit pas d’un état qu’une organisation peut atteindre,
mais plutôt d’un parcours continu qui nécessite un engagement
et des efforts continus de la part de toutes les parties
prenantes.
Il est également important de noter que DevOps n’est pas lié à
une technologie ou à des outils spécifiques.
Le cycle de vie
Le cycle de vie d’application traditionnel tend à séparer le développement du
logiciel du processus d’opérationnalisation de celui-ci, qui implique de le livrer à
ses destinataires prévus et de s’assurer qu’il fonctionne de manière optimale.
Cette approche en silo conduit à de nombreuses inefficacités.
Tout d’abord, les développeurs et les équipes opérationnelles ont des objectifs
généralement différents. Les premiers se concentrent sur l’innovation et
l’amélioration continue de leurs logiciels.
L’objectif principal des seconds est de maintenir la stabilité et la sécurité de
l’environnement qu’ils prennent en charge.
La culture DEVOPS
La culture DevOps englobe les facteurs humains et
organisationnels qui ont un impact sur le développement
et la livraison de logiciels.
C’est pourquoi DevOps représente une culture qui met
en avant la collaboration, la communication et la
responsabilité partagée entre toutes les parties
prenantes de l’organisation.
La culture DevOps crée un environnement collaboratif et
transparent qui ne cesse de s’améliorer, où les équipes
travaillent ensemble pour fournir des logiciels de qualité
de manière efficace et fiable.
Elle implique un changement de mentalité et de
comportement au profit d’une culture basée sur la
confiance, la communication et la responsabilité
partagée.
La culture DEVOPS
Avantages du DEVOPS
• Accélération de la commercialisation
• Adaptation à la dynamique et à la concurrence du marché
• Maintien de la stabilité et de la fiabilité dans les opérations
• Réduction du temps moyen de récupération (MTTR)
Au delà du DEVOPS
Il est important de noter que les avantages DevOps s’étendent
au-delà du cycle de vie des applications traditionnelles.
Son étendue inclut, par exemple, des domaines tels que
l’apprentissage automatique (avec les opérations appliquées à
l’implémentation de modèles Machine Learning) et l’infrastructure
(avec l’infrastructure en tant que code appliquée au déploiement de
services de plateforme sous-jacents).
MLOPS
MLOPS
• Les opérations d’apprentissage automatique, souvent appelées
simplement MLOps, se concentrent sur la transition du développement
de modèles Machine Learning à leur approvisionnement dans les
environnements de production.
• En suivant les pratiques MLOps, les organisations peuvent s’assurer que
leurs charges de travail sont résilientes et peuvent être facilement
recréées.
• Cela inclut la surveillance, le réentraînement et le redéploiement des
modèles en fonction des besoins, et la maintenance de leur stabilité
après chaque déploiement.
IaC
L’infrastructure en tant que code, généralement abrégée en tant qu’IaC, implique
la gestion et l’approvisionnement de l’infrastructure de calcul, de mise en réseau
et de stockage par le biais de méthodes de programmation, plutôt que de
s’appuyer sur la configuration du matériel physique ou l’utilisation d’outils
d’administration interactifs. IaC permet aux développeurs et aux équipes
d’opérations de définir et de gérer des éléments d’infrastructure tels que des
serveurs, des périphériques réseau et des bases de données à l’aide de code. Ce
code est généralement écrit dans un langage de script de haut niveau, lisible par
l’homme. Les scripts sont ensuite exécutés pour automatiser l’approvisionnement
et la configuration de l’infrastructure, ce qui la rend plus efficace, cohérente et
facilement évolutive.
Cycle de vie en DEVOPS
Planification
• La phase de planification implique l’examen des besoins des
clients afin de décrire et de définir les fonctions et fonctionnalités
du logiciels à développer.
• Ce logiciel peut aller de microservices individuels à des
portefeuilles composés de plusieurs produits.
• Le résultat définit les exigences logicielles, l’étendue et les jalons
pour le développement et le déploiement de l’application.
• Du point de vue de DevOps, les principales considérations de
cette phase incluent l’agilité, le focus centré sur le client,
l’alignement et la visibilité.
Développement
• La phase de développement couvre tous les aspects du développement
du code de l’application. Ces aspects incluent la programmation, les
tests et les révisions du code.
• Pour se conformer aux pratiques DevOps, le code doit résider dans un
système de contrôle de code source, ce qui facilite la collaboration et
prend en charge le contrôle de version.
• Une version opérationnelle du code est utilisée pour générer des
artefacts adaptés à la livraison ultérieure. Ces artefacts peuvent prendre
la forme de fichiers binaires exécutables, de bibliothèques de logiciels,
d’images conteneur, de packages d’installation, de fichiers de
configuration, de scripts de déploiement ou même de documentation.
Livraison
• La livraison est le processus de déploiement des artefacts générés
pendant la phase de développement dans des environnements de
production de manière cohérente et fiable.
• Bien que l’objectif ultime de cette phase soit une automatisation
complète par le biais de la livraison continue (CD), certaines
organisations, en particulier dans les premières phases de leur
adoption de DevOps, peuvent choisir d’implémenter des
approbations manuelles ou des vérifications.
• À mesure que la confiance dans les pratiques DevOps augmente,
il est généralement possible d’automatiser entièrement ces
vérifications.
Des Opérations
• La phase des opérations implique la maintenance, la surveillance et
la résolution des problèmes des applications dans des
environnements de production.
• Du point de vue de DevOps, les principaux objectifs à ce stade sont
la stabilité et la fiabilité, la réponse rapide aux incidents, la sécurité
et la conformité, et la satisfaction des clients.
La méthode Agile
• Une approche du développement logiciel et de la gestion de projet.
• Une telle approche est généralement associée aux pratiques
DevOps.
• Aide l'organisation à réaliser une série d'avantages DevOps.
La méthode Agile
• La méthode agile est une approche du développement de logiciels qui
favorise la collaboration entre les équipes, l'amélioration continue et
l'automatisation, dans le but ultime de fournir des logiciels plus rapides,
plus fiables et centrés sur le client.
• Le terme provient du Manifeste Agile, créé en 2001 par un groupe de
développeurs de logiciels, qui fournit un ensemble de principes
directeurs pour le développement moderne de logiciels.
• Le manifeste comprend quatre déclarations fondamentales qui
donnent la priorité aux individus et aux interactions, aux solutions
pratiques et à la collaboration avec les clients plutôt qu'à des
processus et des outils rigides.
Les méthodes Agiles
Outils DEVOPS
La valeur de la méthode Agile
• Les individus et les interactions plutôt
que les processus et les outils
• Les logiciels opérationnels plutôt
qu’une documentation exhaustive.
• La collaboration avec les clients plutôt
que la négociation de contrat.
• L’adaptation au changement plutôt
que le respect des plans
Agile et DEVOPS
• Le manifeste Agile et les principes Agile fournissent un ensemble de
valeurs et de lignes directrices, mais ils ne sont volontairement pas
prescriptifs en termes de méthodes et de pratiques spécifiques.
• Au contraire, l'approche Agile se veut flexible et facilement adaptable,
permettant aux organisations et aux équipes de choisir une approche
plus détaillée en fonction de leurs préférences et de leurs besoins.
• Ces approches détaillées et complètes sont communément appelées
infrastructures.
• Leur objectif est de couvrir toutes les phases du cycle de vie DevOps, y
compris la planification, le développement, la livraison et les opérations.
• Parmi les infrastructures Agile les plus populaires, on peut citer Scrum et
Kanban.
SCRUM
• Scrum est un cadre utilisé par les équipes pour gérer le travail et
résoudre les problèmes en collaboration dans des itérations
courtes (généralement entre une et quatre semaines) appelées
sprints.
• Pour faciliter la collaboration et les progrès, les sprints sont
structurés en fonction des événements, des artefacts et des
rôles.
Événements, communément appelés cérémonies, incluent des
réunions quotidiennes (Daily Scrum, généralement limité à 15 minutes,
également appelée standup quotidien) et au début et à la fin de chaque
sprint (Planification sprint, Révision sprint et Rétrospective sprint).
Artefact
Artefacts définissent une liste hiérarchisée de fonctionnalités,
d’améliorations et de correctifs à développer.
Ces artefacts peuvent couvrir la durée d'un projet ou d'un sprint
(Product Backlog ou Sprint Backlog, respectivement), ou ils peuvent
aider les réunions quotidiennes de Scrum (tableaux de tâches et
tableaux d'épuisement des sprints).
Backlog
• Un tableau des tâches permet de suivre visuellement l’avancement
de chaque élément de backlog. Il affiche les éléments de backlog
divisés en tâches nécessaires à leur réalisation.
• Les tâches sont placées dans des colonnes distinctes (étiquetées À
faire, En cours, et Terminé) en fonction de leur état.
• Le tableau d'avancement du sprint sert d'indicateur visuel pour savoir
si l'équipe est en mesure de terminer le travail qui lui a été confié à la
fin du sprint. Il s’agit d’un graphique qui affiche le total quotidien du
travail restant, généralement en heures.
SCRUM
Les pratiques DEVOPS
• L'intégration de DevOps dans le cycle de vie des applications
implique la mise en œuvre d'une série de pratiques DevOps. La
capacité à maximiser les avantages de DevOps dépend fortement
du degré de réussite de cette mise en œuvre.
• Dans notre exemple de scénario, l'organisation devrait introduire
des changements significatifs dans son modèle opérationnel, en
commençant par promouvoir la collaboration et la communication
entre les équipes de développement et d'exploitation, ainsi
qu'investir dans le contrôle de version, l'automatisation,
l'intégration continue, les tests continus, la livraison continue
et la surveillance continue.
La gestion des versions
• Le contrôle des versions est la pratique qui consiste à gérer les mises à
jour du code en le stockant dans des référentiels désignés, en suivant
ses révisions et en conservant l'historique des changements.
• Cela facilite les révisions de code et la capacité à récupérer les erreurs
de programmation.
• En outre, les systèmes de contrôle de version (VCS) tels que Git
permettent une collaboration dans la création de code entre plusieurs
développeurs grâce à des fonctionnalités telles que le clonage de
référentiel, les demandes d'extraction, les fusions de modifications de
code, la résolution de conflits et la prise en charge des retours en
arrière
Intégration continue et test continu
• L’automatisation constitue l’une des pratiques fondamentales de
DevOps. Dans ce cas, l'automatisation s'applique au processus
de fusion des modifications du code, à leur test et à la
construction des artefacts qui en résultent, le plus tôt possible
dans le cycle de vie de l'application.
• L'objectif est de détecter tout problème potentiel au cours de la
phase de développement, afin de minimiser les efforts et les coûts
liés à la résolution de ces problèmes.
• Les tests automatisés permettent de vérifier que les modifications
du code n'ont pas introduit d'erreurs ou de problèmes de
régression.
Livraison continue CD
• La livraison continue automatise le processus de déploiement des
artefacts construits dans le cadre du CI, en les mettant à la disposition
de leurs utilisateurs.
• Le CD automatise la progression de ces artefacts dans différents
environnements, tels que les tests, la mise en scène et la production.
• L'intégration continue et la livraison continue (CI/CD) forment ensemble
un processus de développement et de livraison de logiciels unifié,
rationalisé et de bout en bout.
IaC
• L'infrastructure en tant que code fait partie intégrante des pratiques
modernes de développement et d'exploitation de logiciels.
• Elle implique l’utilisation de méthodes de programmation pour
fournir et gérer des services d’infrastructure.
• IaC définit les composants de l'infrastructure tels que les serveurs,
les dispositifs de réseau et les bases de données en utilisant un
code.
• Ce code réside généralement dans un VCS, qui gère et suit les
modifications apportées aux configurations de l'infrastructure.
IaC
• L'utilisation de codes facilite l'approvisionnement et la configuration
automatisés de l'infrastructure, ce qui améliore l'efficacité, la
cohérence et l'évolutivité.
• En outre, IaC peut être (et souvent) intégré à CI/CD, ce qui génère
une stratégie complète de distribution de logiciels en combinant
l’approvisionnement d’infrastructure, avec la génération, le test et le
déploiement d’applications dans une séquence continue et
entièrement automatisée.
Relations de DEVOPS
• DEVOPS & CLOUD
• DEVOPS & Qualité
• DEVOPS & Sécurité
• DEVOPS & Automatisation
• DEVOPS & IaC
• DEVOPS & Virtualisation
• DEVOPS et Data Analytics
• …
Le Cloud en DEVOPS
● le cloud fournit l'infrastructure
flexible et évolutive nécessaire pour
exécuter des processus DevOps, en
permettant l'automatisation, l'intégration
continue, le déploiement continu, et la
gestion de l'infrastructure via des outils
et services.
● DevOps, quant à lui, permet aux
équipes de développement et
d'exploitation de collaborer plus
efficacement et de livrer des
applications rapidement et de manière
fiable.
DEVOPS et Qualité
Qualité du Code Performance
Qualité Fonctionnelle
Sécurité
Tests
Expérience Utilisateur (UX)
Fiabilité
Maintenabilité
Time-to-Market (T2M)
Qualité des Processus de Développement
DEVOPS & Qualité Logicielle
• La qualité du développement logiciel ne se résume pas à un seul
aspect. Elle doit être mesurée à travers plusieurs dimensions, allant
de la performance technique (vitesse, ressources) à la
satisfaction des utilisateurs.
• L'intégration de pratiques comme les tests automatisés, les
révisions de code, l'intégration continue et le feedback rapide
permet de maintenir un haut niveau de qualité tout au long du cycle
de vie du logiciel.
• En combinant ces métriques, une équipe peut non seulement
garantir un code propre et robuste, mais aussi s'assurer que le
produit final répond aux besoins et attentes des utilisateurs.
DEVOPS & Sécurité
Shift-Left Security
Automatisation de la sécurité
● Étape de développement : l'analyse statique de code
● Étape d'intégration continue (CI) :
Ces tests incluent des vérifications telles que des scans
de vulnérabilités, des tests d'intrusion automatisés, et
des vérifications de la conformité de la configuration.
● Étape de déploiement continu (CD) :
Ce contrôle peut inclure des tests de pénétration et des
vérifications de l'intégrité des composants logiciels tiers.
DEVOPS & Sécurité
L'intégration de la sécurité dans le processus DevOps (DevSecOps)
transforme la sécurité en une responsabilité partagée et continue tout au
long du cycle de vie du développement logiciel.
En automatisant les contrôles de sécurité, en favorisant la collaboration
entre les équipes de développement, de sécurité et d'exploitation, et en
adoptant une approche proactive pour identifier et corriger les
vulnérabilités, DevOps et sécurité travaillent ensemble pour garantir des
applications plus sûres et des processus de développement plus fiables.
DEVOPS & IaC
• La relation entre DevOps et Infrastructure as Code (IaC) est
essentielle et fondée sur l'automatisation, la rapidité, et l'efficacité.
• IaC est une pratique clé dans l'approche DevOps, car elle permet
de gérer et de provisionner des infrastructures de manière
automatisée et cohérente, à l'aide de fichiers de configuration
plutôt qu'à la main ou via des interfaces graphiques.
DEVOPS & IaC
La combinaison de DevOps et Infrastructure as Code (IaC) permet
aux équipes de développement de travailler plus rapidement et de
manière plus fiable, tout en maintenant des environnements
cohérents, évolutifs et sécurisés.
L'IaC facilite l'automatisation de l'infrastructure, ce qui est au cœur
des pratiques DevOps, et permet de livrer des applications
rapidement et avec une meilleure qualité, tout en réduisant les risques
d'erreur humaine et les problèmes de configuration.
DEVOPS & analyse des données
• DevOps et Data Analytics sont étroitement liés par l'automatisation,
la collaboration et l'intégration continue.
• L'application des principes DevOps aux pipelines de données et aux
modèles analytiques permet de garantir une gestion cohérente,
rapide et efficace des données et des analyses, tout en favorisant
une meilleure collaboration entre les équipes de développement,
d'exploitation et de data science.
Le futur de DEVOPS
• DevOps 2.0 – Une approche basée sur l'intelligence et
l'automatisation intégrée
• Un modèle de DevOps amélioré, intitulé "DevOps 2.0", qui se
concentre sur l'amélioration de l'automatisation et l'intégration de
l'intelligence artificielle (IA) pour résoudre certains des défis clés de
la méthode DevOps.
• Cette approche vise à rendre les processus plus intelligents, plus
agiles et plus prédictifs.
Propositions :
Utiliser des algorithmes de machine learning pour
analyser les erreurs historiques dans le code et prédire
Prédiction des défaillances les points de défaillance possibles avant même qu’ils ne
surviennent dans l'environnement de production.
Appliquer des techniques de machine learning pour
déterminer dynamiquement quels tests doivent être
Optimisation des tests exécutés, en fonction des changements dans le code,
réduisant ainsi le temps d'exécution des tests sans
compromettre la couverture.
Déployer des systèmes d'IA pour l'optimisation en
Amélioration de la gestion des temps réel des ressources cloud, permettant une
gestion plus efficace des coûts tout en assurant une
ressources performance optimale.