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),
- 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).
5 - 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 destaging
. 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.
Qu'est-ce que Jenkins
?
Jenkins
est un outil open-source d'intégration continue qui permet d'automatiser différentes étapes du cycle de développement de logiciels.
Il a été créé en 2011 et est devenu l'un des outils les plus populaires pour la gestion de CI/CD
. Il est entièrement écrit en Java
.
Architecture de Jenkins
L'architecture maître/agent est une conception d'architecture dans laquelle le serveur maître de Jenkins
distribue le travail de build
à plusieurs agents.
Le serveur maître est responsable de la planification des tâches de build
ou des jobs
, de la gestion de l'interface utilisateur et des mises à jour, et bien plus encore.
Les agents, quant à eux, sont des machines, des conteneurs ou des instances de VM
qui exécutent les tâches distribuées par le maître. Le maître surveille ces agents et récupère les résultats des jobs
pour les présenter dans l'interface utilisateur.
Un des principaux avantages de cette architecture est la distribution du travail, ce qui permet des builds
plus rapides et une utilisation plus efficace des ressources. Par exemple, si vous avez plusieurs agents, vous pouvez exécuter plusieurs jobs
en parallèle, ce qui réduit considérablement le temps nécessaire pour passer par tout le pipeline
CI/CD
. Vous pouvez également spécialiser des agents pour certains types de tâches. Si un agent est configuré avec un ensemble particulier de logiciels ou de ressources, le maître peut diriger des tâches spécifiques uniquement vers cet agent.
Cette architecture est particulièrement utile pour les grands projets qui nécessitent beaucoup de ressources de calcul pour les tests et les builds,
ainsi que pour les organisations qui utilisent une grande variété de technologies et d'outils, car elle permet une grande flexibilité dans la configuration des environnements d'agents.
Avantages de Jenkins
- Communauté et écosystème : grande communauté d'utilisateurs et un vaste répertoire de
plugins
, offrant un soutien et des fonctionnalités supplémentaires. - Flexibilité et personnalisation : très adaptable à différents environnements et besoins grâce à sa flexibilité et ses
plugins
. - Intégration avec de nombreux outils : peut être intégré avec pratiquement n'importe quel outil de la chaîne
DevOps
, du contrôle de version aux systèmes de surveillance. - Auto-hébergement : possibilité de l'héberger vous-même, vous donnant un contrôle complet sur la configuration et les ressources.
- Open source : en tant que projet open source, il est gratuit à utiliser et vous pouvez contribuer ou modifier le code source selon vos besoins.
Inconvénients de Jenkins
- Complexité : en raison de sa flexibilité et de ses nombreuses options, il peut être difficile à configurer et à gérer.
- Mise à jour et maintenance : nécessite une maintenance régulière, notamment pour les mises à jour des
plugins
et du serveur lui-même. - Interface utilisateur vieillissante : l'interface utilisateur n'est pas aussi moderne ou intuitive que certains de ses concurrents.
- Ressources : étant un système auto-hébergé, vous devrez gérer vous-même toutes les questions liées à l'infrastructure.
- Documentation : bien que complète, la documentation peut être complexe et dispersée.
Commencez notre formation sur Jenkins dès aujourd'hui !