CI/CD
Intégration continue et déploiement continu
Qu'est-ce que la CI et le CD ?
L'intégration continue (CI) et le déploiement continu (CD) sont des pratiques essentielles dans le développement logiciel moderne.
Elles visent à améliorer la qualité du code, à réduire les erreurs et à accélérer la livraison des applications.
L'intégration continue consiste à intégrer fréquemment les modifications de code dans un référentiel partagé. Chaque intégration est vérifiée par une compilation automatisée et des tests, permettant de détecter rapidement les problèmes.
Le déploiement continu va plus loin en automatisant le processus de mise en production. Une fois que le code a passé tous les tests, il est automatiquement déployé dans l'environnement de production.
Les principaux avantages du CI/CD sont :
- Détection précoce des bugs : Les problèmes sont identifiés rapidement, ce qui facilite leur résolution.
- Réduction des risques : Les petites modifications fréquentes sont moins risquées que les grands changements occasionnels.
- Feedback rapide : Les développeurs obtiennent rapidement des retours sur leur travail.
- Livraison plus rapide : Les nouvelles fonctionnalités atteignent plus vite les utilisateurs.
- Amélioration de la qualité : Les tests automatisés garantissent un niveau de qualité constant.
Un pipeline CI/CD typique comprend les étapes suivantes :
- Commit : Le développeur pousse son code vers le dépôt.
- Build : Le code est compilé et les dépendances sont résolues.
- Test : Des tests automatisés sont exécutés (unitaires, d'intégration, etc.).
- Analyse : Le code est analysé pour détecter les problèmes de qualité ou de sécurité.
- Déploiement : L'application est déployée dans un environnement de test ou de production.
Pour mettre en place un pipeline CI/CD, on utilise généralement des outils spécialisés comme Jenkins, GitLab CI, Travis CI ou CircleCI. Ces outils s'intègrent avec les systèmes de gestion de version comme Git et peuvent être configurés pour s'exécuter automatiquement à chaque modification du code.
Principaux outils de CI/CD
Voici une liste des principaux soutils de CI/CD (en 2024) :
-
Jenkins
Jenkins est un serveur d'intégration continue open source très populaire, offrant une grande flexibilité grâce à son vaste écosystème de plugins. Il permet d'automatiser la construction, les tests et le déploiement de logiciels sur diverses plateformes.
-
GitLab CI
GitLab CI est une solution complète intégrée à la plateforme GitLab, offrant des fonctionnalités de contrôle de version, de révision de code et de CI/CD dans un seul tableau de bord.
-
GitHub Actions
GitHub Actions est une plateforme d'intégration et de livraison continues (CI/CD) qui permet d'automatiser les workflows de développement, de test et de déploiement directement depuis vos dépôts GitHub.
-
CircleCI
CircleCI est une plateforme CI/CD basée sur le cloud, particulièrement adaptée aux projets open source et à grande échelle. Elle offre une grande flexibilité et s'intègre facilement avec les principaux systèmes de contrôle de version.
-
Travis CI
Travis CI est un service d'intégration continue distribué, principalement utilisé pour les projets hébergés sur GitHub. Il offre une configuration simple et un hébergement dans le cloud.
-
Bamboo
Développé par Atlassian, Bamboo est un outil CI/CD puissant qui s'intègre parfaitement avec d'autres produits Atlassian comme JIRA et Bitbucket.
-
Azure DevOps
Azure DevOps est une plateforme complète de Microsoft pour le développement d'infrastructures, permettant la création, les tests et le déploiement dans divers langages et environnements.
-
TeamCity
TeamCity, développé par JetBrains, est un outil CI/CD open source basé sur Java, offrant une excellente intégration avec Docker et Kubernetes.
-
Buildkite
Buildkite est une plateforme CI/CD rapide, sécurisée et évolutive, particulièrement utile pour concevoir des sites web sur une infrastructure personnalisée.
-
Semaphore
Semaphore est une application CI/CD hébergée, intégrée à GitHub, qui permet d'automatiser les pipelines de livraison continue et supporte les applications basées sur Docker.
-
GoCD
GoCD est un outil open source pour la création et la publication de logiciels, offrant une configuration facile et un contrôle complet du flux de travail de bout en bout.
-
Woodpecker CI
Woodpecker est un outil CI/CD open source et gratuit, basé sur des conteneurs Docker. Il permet de créer facilement plusieurs workflows pour un projet, qui peuvent même dépendre les uns des autres.
-
Dokploy
Dokploy est une plateforme tout-en-un open source qui simplifie le déploiement et la gestion d'applications. Elle offre des fonctionnalités telles que le déploiement en un clic de modèles open source, la gestion avancée des utilisateurs et l'accès direct aux terminaux des conteneurs.
-
Forgejo Runner
Forgejo Runner est un daemon qui récupère les workflows à exécuter depuis une instance Forgejo, les exécute, renvoie les logs et rapporte le succès ou l'échec. Il s'installe séparément de l'instance principale Forgejo et supporte différents environnements d'exécution comme Docker, Podman et LXC.
Exemple pratique
Mise en place d'un pipeline CI/CD avec GitHub Actions
Imaginons que vous développez une application web simple en JavaScript. Voici comment vous pourriez mettre en place un pipeline CI/CD basique avec GitHub Actions :
-
Créez un fichier
.github/workflows/ci-cd.yml
dans votre dépôt GitHub. -
Ajoutez le contenu suivant au fichier :
name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '14.x'
- run: npm ci
- run: npm run build --if-present
- run: npm test
deploy:
needs: build-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to production
run: |
echo "Déploiement en production..."
# Ici, vous ajouteriez les commandes pour déployer votre application
Ce pipeline effectue les actions suivantes :
- À chaque push ou pull request sur la branche main
- Il installe les dépendances, construit l'application et exécute les tests
- Si tout réussit et que c'est un push sur main, il simule un déploiement
Pour utiliser ce pipeline, assurez-vous d'avoir des scripts npm appropriés pour build
et test
dans votre package.json
.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans ce TP, nous allons simuler la mise en place d'un pipeline CI/CD pour une application web simple.
Vous allez créer un fichier de configuration pour GitHub Actions qui automatisera le processus de build, test et déploiement de l'application.
Étapes :
-
Créez un nouveau dépôt GitHub pour une application web fictive.
-
Dans ce dépôt, créez un fichier
.github/workflows/ci-cd.yml
. -
Configurez le pipeline pour qu'il effectue les étapes suivantes :
- Déclenchez le pipeline sur chaque push et pull request sur la branche main
- Utilisez la dernière version de Ubuntu comme environnement d'exécution
- Configurez Node.js version 14.x
- Installez les dépendances avec
npm ci
- Exécutez les tests avec
npm test
- Construisez l'application avec
npm run build
- Si c'est un push sur main, simulez un déploiement en affichant un message
-
Ajoutez une étape d'analyse statique du code avec ESLint.
-
Configurez le pipeline pour qu'il ne déploie que si tous les tests et l'analyse de code passent.
-
Ajoutez une étape pour créer et publier un artefact contenant les fichiers de build.
Rédigez le contenu du fichier .github/workflows/ci-cd.yml
pour réaliser ces tâches.
Une solution
Vous devez être connecté pour voir le contenu.