Créer son premier pipeline CI/CD avec GitLab CI
🎯 Objectifs
- ✅ Comprendre le fonctionnement de GitLab CI/CD
- ✅ Créer un fichier
.gitlab-ci.yml - ✅ Définir des stages et des jobs
- ✅ Utiliser les runners partagés et self-hosted
- ✅ Intégrer Docker dans vos pipelines
📋 Prérequis
| Prérequis | Niveau |
|---|---|
| Git | Intermédiaire |
| Docker | Débutant |
| Compte GitLab | Créé sur gitlab.com |
📖 Rappel CI/CD
CI (Intégration Continue) = build + tests automatiques à chaque push.
CD (Déploiement Continu) = déploiement automatique vers staging ou production.
💡 GitLab CI est l'outil CI/CD natif de GitLab. Pour une autre approche, consultez les modules GitHub Actions.
🦊 GitLab CI vs GitHub Actions
| Aspect | GitLab CI | GitHub Actions |
|---|---|---|
| Fichier config | .gitlab-ci.yml | .github/workflows/*.yml |
| Runners | Partagés ou self-hosted | GitHub-hosted ou self-hosted |
| Structure | Stages → Jobs | Jobs → Steps |
| Registry Docker | Intégré nativement | Via GitHub Packages |
| Plateforme | All-in-one DevOps | Outils séparés |
🔧 Concepts Clés
| Concept | Description |
|---|---|
| Pipeline | Ensemble de stages exécutés à chaque push |
| Stage | Phase du pipeline (build, test, deploy) |
| Job | Tâche exécutée dans un stage |
| Runner | Machine qui exécute les jobs |
| Artifact | Fichier produit par un job, transmis au suivant |
Structure d'un pipeline :
Pipeline
├── Stage: build
│ └── Job: compile
├── Stage: test
│ ├── Job: unit-test
│ └── Job: lint
└── Stage: deploy
└── Job: deploy-staging💡 Les jobs d'un même stage s'exécutent en parallèle. Les stages s'exécutent séquentiellement.
🚀 Premier Pipeline
Créez un fichier .gitlab-ci.yml à la racine de votre projet :
stages:
- build
- test
- deploy
build:
stage: build
image: node:20-alpine
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
test:
stage: test
image: node:20-alpine
script:
- npm ci
- npm test
deploy:
stage: deploy
script:
- echo "Déploiement en cours..."
only:
- mainExplication des mots-clés
| Mot-clé | Rôle |
|---|---|
stages | Déclare l'ordre des phases du pipeline |
stage | Associe un job à un stage |
image | Image Docker utilisée pour le job |
script | Commandes shell à exécuter |
artifacts | Fichiers à conserver entre les stages |
only | Branches sur lesquelles le job s'exécute |
🐳 Mot-clé image
Chaque job s'exécute dans un conteneur Docker. Choisissez l'image adaptée à votre projet :
| Image | Usage |
|---|---|
node:20-alpine | Projets Node.js / JavaScript |
python:3.12 | Projets Python |
docker:latest | Build d'images Docker |
maven:3.9 | Projets Java / Maven |
alpine:latest | Scripts shell légers |
job:
image: python:3.12
script:
- pip install -r requirements.txt
- pytest⚙️ Runners
Runners partagés
GitLab.com fournit des runners partagés gratuits. Aucune configuration nécessaire.
Runners self-hosted
Installez un runner sur votre propre machine pour plus de contrôle.
Tags
Utilisez les tags pour cibler un runner spécifique :
job:
tags:
- docker
- linux
script:
- echo "Exécuté sur un runner Linux avec Docker"📦 Artefacts
Les artefacts permettent de passer des fichiers entre stages.
build:
stage: build
script:
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week💡
expire_inlibère automatiquement l'espace de stockage après la durée spécifiée.
Le stage deploy peut ensuite utiliser le dossier dist/ produit par build.
👀 Voir les Résultats
- Allez dans CI/CD → Pipelines dans l'interface GitLab
- Chaque stage affiche un statut vert (✅) ou rouge (❌)
- Cliquez sur un job pour voir ses logs en temps réel
💡 Vous pouvez aussi relancer un job échoué directement depuis l'interface.
🔑 Variables Prédéfinies
GitLab injecte automatiquement des variables dans chaque job :
| Variable | Contenu |
|---|---|
$CI_COMMIT_SHA | Hash du commit |
$CI_COMMIT_BRANCH | Branche courante |
$CI_PROJECT_NAME | Nom du projet |
$CI_PIPELINE_ID | ID unique du pipeline |
job:
script:
- echo "Commit $CI_COMMIT_SHA sur $CI_COMMIT_BRANCH"❌ Erreurs Courantes
| Erreur | Cause | Solution |
|---|---|---|
yaml invalid | Syntaxe YAML incorrecte | Validez avec le linter CI de GitLab |
image not found | Image Docker inexistante | Vérifiez le nom sur Docker Hub |
runner not available | Aucun runner compatible | Vérifiez les tags ou utilisez les runners partagés |
script failed | Commande en erreur | Lisez les logs du job |
artifacts too large | Fichiers trop volumineux | Réduisez les paths ou augmentez la limite |
💡 Utilisez CI/CD → Editor dans GitLab pour valider votre YAML avant de push.
📌 Points Clés
.gitlab-ci.ymlà la racine déclenche automatiquement le pipeline- Les stages définissent l'ordre, les jobs définissent les tâches
- Chaque job tourne dans un conteneur Docker via
image: - Les artefacts passent des fichiers entre stages
- Les runners partagés de GitLab.com sont gratuits et prêts à l'emploi
📚 Ressources
🚀 Prochaines étapes
Vous avez créé vos premiers pipelines GitLab CI. Passez au niveau intermédiaire :
- GitLab CI : rules, cache et pipelines DAG - Rules, cache, services, pipelines DAG et templates