Créer son premier pipeline CI/CD avec GitHub Actions
🎯 Objectifs
À la fin de ce module, vous serez capable de :
- ✅ Comprendre les concepts CI/CD et leur importance
- ✅ Créer un workflow GitHub Actions from scratch
- ✅ Automatiser les tests sur chaque push
- ✅ Utiliser des actions du Marketplace
- ✅ Intégrer Docker dans un pipeline CI
📋 Prérequis
| Requis | Niveau |
|---|---|
| Git (branches, merge, PR) | Intermédiaire |
| Docker (images, conteneurs) | Débutant |
| Compte GitHub | Actif |
📖 Pourquoi CI/CD ?
Le problème sans CI/CD
Sans automatisation, chaque livraison ressemble à ça :
- Un développeur pousse du code
- Quelqu'un lance les tests manuellement
- Quelqu'un build l'application manuellement
- Quelqu'un déploie manuellement
Résultat : c'est lent, sujet aux erreurs, et personne ne veut le faire.
La solution : CI/CD
| Terme | Signification | Rôle |
|---|---|---|
| CI | Continuous Integration | Build + test automatiques à chaque push |
| CD | Continuous Delivery | Déploiement automatique après validation des tests |
Les bénéfices
- 🚀 Feedback rapide - erreurs détectées en minutes, pas en jours
- 🛡️ Qualité du code - chaque changement est testé
- 📦 Déploiement fiable - même processus à chaque fois
- 🤝 Collaboration fluide - les PR sont validées automatiquement
🔄 Le Pipeline CI/CD
Un pipeline est une série d'étapes automatisées :
Code → Build → Test → Deploy
↑ ↓ ↓ ↓
Push Compile Vérifie Met en
le code la qualité production| Étape | Description | Exemple |
|---|---|---|
| Build | Compile le code, installe les dépendances | npm ci, docker build |
| Test | Lance les tests automatisés | npm test, pytest |
| Deploy | Déploie sur un serveur ou cloud | Push sur un registry, SSH |
💡 Si une étape échoue, le pipeline s'arrête et vous êtes notifié.
🔧 Outils CI/CD
| Outil | Hébergement | Gratuit ? | Idéal pour |
|---|---|---|---|
| GitHub Actions | Cloud (GitHub) | ✅ Oui | Projets sur GitHub |
| GitLab CI | Cloud / Self-hosted | ✅ Oui | Projets sur GitLab |
| Jenkins | Self-hosted | ✅ Open source | Entreprises, personnalisation |
| CircleCI | Cloud | Partiel | Startups, SaaS |
💡 Nous utilisons GitHub Actions - gratuit, intégré à GitHub, et très populaire.
🏗️ GitHub Actions - Concepts
Chaque concept s'emboîte comme des poupées russes :
| Concept | Définition |
|---|---|
| Workflow | Fichier YAML dans .github/workflows/ |
| Event | Ce qui déclenche le workflow (push, PR, cron…) |
| Job | Un ensemble d'étapes qui s'exécute sur un runner |
| Step | Une action ou commande dans un job |
| Runner | Machine virtuelle qui exécute le job |
Workflow (.yml)
└── Event (push)
└── Job (test)
├── Step 1 (checkout)
├── Step 2 (setup node)
└── Step 3 (npm test)🚀 Premier Workflow
Créez le fichier .github/workflows/ci.yml :
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm testExplication ligne par ligne
| Ligne | Rôle |
|---|---|
name: CI | Nom du workflow affiché dans GitHub |
on: push | Déclenché à chaque push sur main |
on: pull_request | Déclenché à chaque PR vers main |
runs-on: ubuntu-latest | Exécute sur une VM Ubuntu |
actions/checkout@v4 | Clone le dépôt dans le runner |
actions/setup-node@v4 | Installe Node.js 20 |
npm ci | Installe les dépendances (mode CI) |
npm test | Lance les tests |
💡
npm ciest préféré ànpm installen CI - plus rapide et déterministe.
🧩 Actions du Marketplace
Les actions sont des blocs réutilisables créés par la communauté.
Actions les plus utilisées
| Action | Rôle |
|---|---|
actions/checkout@v4 | Clone le dépôt |
actions/setup-node@v4 | Installe Node.js |
actions/setup-python@v5 | Installe Python |
actions/cache@v4 | Met en cache les dépendances |
Utilisation :
- uses: actions/setup-python@v5
with:
python-version: '3.12'💡 Toujours épingler la version avec
@v4pour éviter les surprises.
⚡ Déclencher un Workflow
Événements disponibles
| Événement | Déclencheur | Exemple |
|---|---|---|
push | Push sur une branche | push: branches: [main] |
pull_request | Ouverture/mise à jour d'une PR | pull_request: branches: [main] |
schedule | Exécution planifiée (cron) | schedule: - cron: '0 8 * * 1' |
workflow_dispatch | Déclenchement manuel | Bouton dans l'UI GitHub |
Filtres par branche et chemin
on:
push:
branches: [main, develop]
paths:
- 'src/**'
- '!docs/**'💡 Le filtre
pathsévite de lancer le pipeline pour des changements qui ne touchent pas le code.
🐳 Workflow avec Docker
Combinez CI et Docker pour tester dans un conteneur :
jobs:
docker-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build image
run: docker build -t myapp:${{ github.sha }} .
- name: Run tests
run: docker run myapp:${{ github.sha }} npm test${{ github.sha }} utilise le hash du commit comme tag - chaque build est unique.
👀 Voir les Résultats
- Allez dans l'onglet Actions de votre dépôt GitHub
- Cliquez sur le workflow exécuté
- Vérifiez le statut :
- ✅ Vert - tous les jobs ont réussi
- ❌ Rouge - au moins un job a échoué
- Cliquez sur un job pour voir les logs détaillés
⚠️ Lisez toujours les logs en cas d'échec - le message d'erreur est souvent explicite.
❌ Erreurs Courantes
| Erreur | Cause | Solution |
|---|---|---|
No workflow found | Fichier mal placé | Vérifiez .github/workflows/ |
Invalid workflow file | Erreur de syntaxe YAML | Vérifiez l'indentation (2 espaces) |
npm ci failed | Pas de package-lock.json | Committez le fichier lock |
Permission denied | Droits insuffisants | Vérifiez les permissions du workflow |
Action not found | Mauvaise version | Vérifiez @v4 vs @v3 |
📌 Points Clés
- 🔄 CI = build + test automatiques à chaque push
- 📦 CD = déploiement automatique après validation
- 📝 Les workflows sont des fichiers YAML dans
.github/workflows/ - 🧩 Les actions sont des blocs réutilisables du Marketplace
- 🐳 Docker s'intègre facilement dans un pipeline CI
📚 Ressources
🚀 Prochaines étapes
Vous avez créé vos premiers workflows CI/CD. Allez plus loin :
- GitHub Actions : multi-jobs, artefacts et workflows réutilisables - Pipelines multi-jobs, artefacts, cache et workflows réutilisables