Students : DIALLO Samba & DIOP Mouhamed
Pipeline CI/CD avec GitHub Actions
Le workflow ci-cd-ghcr.yml automatise l’intégralité du pipeline CI/CD pour l’EcoData Platform, de la phase de test au déploiement des images Docker sur GitHub Container Registry.
Vue d’ensemble
Ce pipeline GitHub Actions est déclenché automatiquement à chaque :
- Push sur la branche
main - Pull Request vers la branche
main
Il garantit la qualité du code et automatise la construction et publication des images Docker.
Architecture du pipeline
┌─────────────────────────────────────────┐
│ Déclenchement (Push/PR) │
└───────────────┬─────────────────────────┘
│
▼
┌──────────────┐
│ JOB 1 │
│ Tests │
└──────┬───────┘
│
▼
┌──────────────┐
│ JOB 2 │
│ Build & Push│ (uniquement sur push)
└──────┬───────┘
│
┌───────┴───────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ JOB 3 │ │ JOB 4 │
│Comment PR│ │ Report │
└──────────┘ └──────────┘
Jobs du pipeline
Job 1 : Tests
Objectif : Valider que le code compile et que les dépendances sont correctes.
Étapes :
- Checkout du code source
- Installation de Python 3.11
- Installation des dépendances backend
- Installation des dépendances frontend
- Vérification de la compilation backend
- Vérification de la compilation frontend
Configuration :
test:
name: Run Tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: projet-final-devops/ecodata-platformTests exécutés :
# Backend
pip install -r requirements.txt
python -c "print('[OK] Backend compile correctement')"
# Frontend
pip install -r requirements.txt
python -c "print('[OK] Frontend compile correctement')"Job 2 : Build and Push
Objectif : Construire les images Docker et les pousser vers GHCR.
Conditions d’exécution :
- Exécuté uniquement sur les
push(pas sur les Pull Requests) - Nécessite le succès du Job 1 (Tests)
Étapes :
- Configuration de Docker Buildx
- Authentification auprès de GHCR avec
GITHUB_TOKEN - Extraction des métadonnées (tags, labels)
- Build et push de l’image backend
- Build et push de l’image frontend
Images générées :
ghcr.io/samba-diallo/devops/ecodata-backend:latest
ghcr.io/samba-diallo/devops/ecodata-backend:main-<sha>
ghcr.io/samba-diallo/devops/ecodata-frontend:latest
ghcr.io/samba-diallo/devops/ecodata-frontend:main-<sha>
Configuration :
build-and-push:
needs: test
if: github.event_name == 'push'
permissions:
contents: read
packages: writeJob 3 : Comment PR
Objectif : Commenter automatiquement la Pull Request avec le statut du build.
Conditions d’exécution :
- Sur Push ou Pull Request
- Nécessite les Jobs 1 et 2
Message généré :
## ✅ Pipeline CI/CD Status
**Tests:** PASSED
**Build:** SUCCESS
**Push to GHCR:** SUCCESS
### Images pushed:
- Backend: `ghcr.io/samba-diallo/devops/ecodata-backend:latest`
- Frontend: `ghcr.io/samba-diallo/devops/ecodata-frontend:latest`
**Next:** Deploy to Minikube locally or Kubernetes clusterJob 4 : Report
Objectif : Générer un rapport de déploiement téléchargeable.
Conditions d’exécution :
- S’exécute toujours, même si d’autres jobs échouent (
if: always())
Contenu du rapport :
Pipeline Summary Report
======================
Tests: success
Build: success
Timestamp: 2026-01-05 21:59:00
Artefact :
- Nom :
deployment-report - Rétention : 30 jours
- Format : fichier texte
Déclencheurs
Push sur main
on:
push:
branches:
- main
paths:
- 'projet-final-devops/ecodata-platform/**'
- '.github/workflows/ci-cd-ghcr.yml'Le pipeline se déclenche uniquement si des fichiers dans ces chemins sont modifiés.
Pull Request vers main
on:
pull_request:
branches:
- main
paths:
- 'projet-final-devops/ecodata-platform/**'Variables d’environnement
env:
REGISTRY: ghcr.io
IMAGE_NAME_BACKEND: ${{ github.repository }}/ecodata-backend
IMAGE_NAME_FRONTEND: ${{ github.repository }}/ecodata-frontendCes variables sont accessibles dans tous les jobs du workflow.
Configuration GitHub requise
Permissions du workflow
Important : Le workflow nécessite des permissions d’écriture pour GHCR.
Configuration à activer :
- Aller sur :
https://github.com/samba-diallo/Devops - Settings → Actions → General
- Workflow permissions → Sélectionner
Read and write permissions - Cliquer sur Save
Visibilité des packages GHCR
Pour rendre les images publiques :
- Aller sur votre profil GitHub → Packages
- Sélectionner
ecodata-backendetecodata-frontend - Package settings → Danger Zone
- Change visibility → Public
Utilisation
Déclencher manuellement le pipeline
Via un commit :
# Faire un changement
echo "# Test pipeline" >> README.md
# Commit et push
git add README.md
git commit -m "Test CI/CD pipeline"
git push origin mainVia une Pull Request :
# Créer une branche
git checkout -b test-feature
# Faire des modifications
echo "nouvelle feature" > feature.txt
git add feature.txt
git commit -m "Add new feature"
# Pousser et créer une PR
git push origin test-featureVoir l’exécution
- Aller sur :
https://github.com/samba-diallo/Devops/actions - Cliquer sur le workflow exécuté
- Voir les logs de chaque job
Déboguer les erreurs
Tests échouent
# Vérifier localement
cd projet-final-devops/ecodata-platform/backend
pip install -r requirements.txt
python -c "import main"Permission denied pour GHCR
Error: denied: permission_denied: write_package
Solution : Vérifier les permissions du workflow (voir Configuration GitHub).
Syntaxe YAML invalide
# Valider localement
python3 -c "import yaml; yaml.safe_load(open('.github/workflows/ci-cd-ghcr.yml'))"Téléchargement
Le fichier workflow est disponible :