Qu'est-ce que le DevOps ?
"Devops"
est la concaténation des trois premières lettres du mot anglais development
(développement) et de l'abréviation ops
du mot anglais operations
(exploitation).
C'est un terme qui a été inventé par le belge Patrick Debois
en 2007.
Le DevOps
est un ensemble de pratiques qui visent à réduire le fossé entre le développement logiciel (Dev
) et les opérations informatiques (Ops
), d'où le terme.
L'idée est de favoriser une collaboration plus étroite et une meilleure communication entre ces deux entités qui, dans les modèles traditionnels, opèrent souvent de manière isolée.
Les principes clés du DevOps
comprennent aujourd'hui :
- l'intégration continue (
CI
pourcontinuous integration
en anglais - le code est régulièrement fusionné et testé), - la livraison continue (
CD
pourcontinuous delivery
- les mises à jour du logiciel sont régulièrement libérées pour la production), - l'infrastructure en tant que code (la gestion et la provision des infrastructures informatiques via le code -
IAC
en anglais pourInfrastructures As Code
), - la surveillance et la journalisation (le suivi en temps réel de la performance et des erreurs du logiciel)
- la culture de la rétroaction (l'encouragement à l'amélioration constante via les retours d'information)
Le schéma classique est celui-ci :
Outils DevOps
principaux
1 - Planification et collaboration :
Ces outils permettent de créer des tâches et de gérer un projet. Les plus utilisés sont :
Gitlab
Github
Jira
2 - Gestion du code (développement)
Ces outils permettent d'effectuer un contrôle de version du code. Les plus utilisés sont :
GitHub
GitLab
Bitbucket
3 - Intégration Continue / Déploiement Continu (CI/CD) :
Ces outils surveillent les commits
dans votre dépôt par exemple Github
. Lorsqu'un commit est effectué, ils lancent automatiquement un "pipeline
" d'intégration continue qui peut compiler le code, exécuter des tests unitaires, des tests d'intégration, et d'autres types de tests pour s'assurer que les dernières modifications n'ont pas introduit de bugs.
Si tous les tests passent, ces outils peuvent être configurés pour déployer automatiquement les changements sur un environnement de production, de staging
ou de test
. Cela accélère le processus de livraison de nouvelles fonctionnalités et de corrections de bugs.
Des solutions très connues sont :
Jenkins
GitLab CI/CD
Github actions
AWS CodePipeline
Azure DevOps
CircleCI
Travis CI
4 - Gestion de l'infrastructure :
Ces outils permettent de faire des choses très différentes mais concernent les serveurs et les clusters
.
Nous pouvons citer quelques exemples :
Docker
: pour créer des images et ensuite les exécuter dans des conteneurs sur uncluster
.Docker Hub
(ou tout autreContainer Registry
- il y en a plusieurs dizaines) : plateforme de servicecloud
qui permet aux développeurs de stocker et d'utiliser des images d'applications conteneurisées.Kubernetes
: plateforme qui automatise la déploiement, la mise à l'échelle et la gestion des applications conteneurisées, offrant un cadre pour orchestrer et coordonner des conteneurs au sein d'un environnement decloud
.Terraform
: outil d'Infrastructure as Code (IaC
) open source qui permet aux développeurs de définir et de fournir des infrastructures de centres de données en utilisant un langage de description déclaratif, facilitant ainsi la gestion et l'orchestration des ressourcescloud
.Ansible
: outil d'automatisation open source qui permet la gestion de configuration, le déploiement d'applications et l'orchestration de tâches sur une variété de systèmes et de plateformes (en résumé permet de configurer et de gérer des serveurs plus simplement).
4 - Surveillance et retour d'information :
Ces outils permettent de surveiller (monitoring
) des clusters
ou plus généralement des applications exécutées sur des serveurs.
Voici une liste des outils les plus courants :
Prometheus
: système de surveillance et d'alerte qui collecte et stocke les métriques d'application et de système en temps réel, offrant des fonctionnalités de requête et d'alerte pour aider à la détection et à la résolution des problèmes.Grafana
: plateforme pour la visualisation et l'analyse de données, permettant aux utilisateurs de créer des tableaux de bord interactifs et compréhensibles pour surveiller et analyser en temps réel les données provenant de diverses sources, le plus souvent dePrometheus
.ELK Stack
(Elasticsearch
,Logstash
,Kibana
) : suite d'outils qui fournit des capacités de recherche, d'analyse, de journalisation et de visualisation de données, permettant aux utilisateurs de transformer leurs données en insights précieux.Datadog / Nagios / New Relic / Sentry
: plateformes de surveillance et d'analyse des performances en temps réel pour les infrastructurescloud
, les applications, les journaux et les métriques, facilitant la détection des problèmes et leur résolution.
Vous pouvez retrouver tous les outils principaux utilisés avec Kubernetes
ici. Ne soyez pas découragés, il n'y besoin dans la plupart des projets que de n'en connaitre vraiment que quelques-uns.
Qu'est-ce que le CI / CD ?
CI
(Continuous Integration
- Intégration Continue)
L'Intégration Continue (CI
), est une pratique de développement logiciel dans laquelle les développeurs intègrent régulièrement leur code dans un répertoire Git
. Chaque fois qu'un développeur pousse du code, une série d'automatisations est déclenchée pour compiler, tester et vérifier le code nouvellement ajouté. L'objectif principal de la CI est de détecter les problèmes d'intégration tôt et de garantir que le code nouvellement ajouté ne casse pas l'application existante.
Les étapes typiques incluent la compilation du code (build
), l'exécution de tests unitaires et d'autres tests automatisés, la vérification des normes de code, la génération de rapports de test et la fourniture de commentaires rapide aux développeurs sur l'état de leur code. Dans un contexte de conteneurisation, comme avec Kubernetes
, c'est également pendant l'intégration continue que sont build
les images.
Les outils CI
couramment utilisés incluent Jenkins
, Travis CI
, CircleCI
, GitLab CI/CD
, Github Actions
, et bien d'autres.
CD
(Continuous Deployment
- Déploiement Continu)
Le CD
, ou Déploiement Continu, est une extension de la CI
qui vise à automatiser le déploiement des changements de code nouvellement validés vers les environnements de production ou de pré-production.
Contrairement à la CI
qui se concentre principalement sur les builds
, les tests et les vérifications, le CD
s'intéresse à l'automatisation de la mise en production des changements.
Avec le CD
, une fois que le code a passé avec succès les étapes de la CI
et qu'il a été validé, il est automatiquement déployé dans un environnement cible, généralement à partir d'un pipeline automatisé. Le CD
permet de minimiser le temps nécessaire pour mettre en production de nouvelles fonctionnalités ou des correctifs, tout en réduisant les risques liés aux déploiements manuels.
Il existe deux approches principales en matière de CD
:
Continuous Deployment
(Déploiement Continu) : dans cette approche, chaque changement de code validé est automatiquement déployé dans l'environnement de production sans intervention humaine. Cela nécessite une confiance élevée dans l'automatisation et une solide suite de tests automatisés.
Continuous Delivery
(Livraison Continue) : ici, les changements de code validés sont automatiquement déployés dans un environnement de pré-production ou de staging
. La décision de déployer dans l'environnement de production est prise manuellement, généralement par un responsable technique, après avoir évalué les risques.
Suivez nos formations pour apprendre avec de nombreux projets à réaliser des pipelines CI/CD réalistes :