📚 Rapport Technique CI/CD - Projet Qrious Quiz

Projet Cloud Native DevOps - ESIEE Paris 2025
👤 Auteur: Ilyas GHANDAOUI E4FI ESIEE Paris
📅 Date: 28 décembre 2025
🔗 Repository : https://github.com/ilyasgdo/Projet-Full-Stack-ESIEE-2025-Ilyas-Cyprien
📋 Table des Matières
- Introduction
- Architecture Globale
- Phase 1 : Application Web
- Phase 2 : Intégration Continue (CI)
- Phase 3 : Livraison Continue (CD)
- Phase 4 : Déploiement Kubernetes
- Base de Données
- Scripts d’Automatisation
- Sécurité
- Guide de Déploiement
- Conclusion
1. Introduction
1.1 Contexte du Projet
Ce projet implémente une architecture CI/CD complète pour une application de quiz web. L’objectif est de démontrer les pratiques DevOps modernes avec :
- Intégration Continue (CI) : Tests automatisés et build Docker
- Livraison Continue (CD) : Déploiement automatique sur Kubernetes
- Infrastructure locale : Minikube pour le cluster Kubernetes
1.2 Technologies Utilisées

1.3 Objectifs Pédagogiques
| Objectif | Implémentation |
|---|---|
| Tests automatisés | ✅ Vitest (Frontend) + Pytest (Backend) |
| Images Docker | ✅ Multi-architecture (amd64/arm64) |
| Déploiement K8s | ✅ Minikube avec manifests YAML |
| Opérations CRUD | ✅ Questions, Réponses, Participations |
| Pipeline CI/CD | ✅ GitHub Actions |
2. Architecture Globale
2.1 Vue d’Ensemble du Système

2.2 Flux de Données

3. Phase 1 : Application Web
3.1 Architecture de l’Application

3.2 Structure des Fichiers
📁 Projet-Full-Stack-ESIEE-2025-Ilyas-Cyprien/
├── 📁 .github/workflows/
│ └── 📄 ci-cd.yml # Pipeline GitHub Actions
├── 📁 k8s/
│ ├── 📄 configmap.yaml # Variables d'environnement
│ ├── 📄 secrets.yaml # Secrets (base64)
│ ├── 📄 backend-deployment.yaml
│ ├── 📄 frontend-deployment.yaml
│ └── 📄 pvc.yaml # Persistent Volume Claim
├── 📁 scripts/
│ ├── 📄 start-cd.sh # Setup complet
│ ├── 📄 setup-minikube.sh # Config Minikube
│ ├── 📄 deploy.sh # Déploiement K8s
│ └── 📄 auto-deploy.sh # Watcher Docker Hub
├── 📁 quiz-api/
│ ├── 📄 app.py
│ ├── 📄 models.py
│ ├── 📄 auth.py
│ ├── 📄 Dockerfile
│ ├── 📄 requirements.txt
│ └── 📁 tests/
│ └── 📄 test_api.py
└── 📁 quiz-ui/
├── 📁 src/
│ ├── 📁 views/
│ ├── 📁 services/
│ └── 📁 test/
├── 📄 Dockerfile.k8s
└── 📄 package.json
3.3 API REST Endpoints

4. Phase 2 : Intégration Continue (CI)
4.1 Pipeline GitHub Actions

4.2 Configuration du Workflow
# .github/workflows/ci-cd.yml
name: CI/CD Pipeline
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
jobs:
test-frontend:
name: Frontend Tests (Vitest)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
working-directory: quiz-ui
- run: npm run test:run
working-directory: quiz-ui
test-backend:
name: Backend Tests (Pytest)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.9'
- run: pip install -r requirements.txt
working-directory: quiz-api
- run: pytest tests/ -v
working-directory: quiz-api
build-and-push:
needs: [test-frontend, test-backend]
runs-on: ubuntu-latest
# ... build Docker multi-arch4.3 Couverture des Tests

| Catégorie | Framework | Nombre de Tests |
|---|---|---|
| Frontend - Composants | Vitest | 2 |
| Frontend - Services | Vitest | 2 |
| Backend - Health Check | Pytest | 2 |
| Backend - Auth | Pytest | 3 |
| Backend - CRUD Questions | Pytest | 8 |
| Backend - Participations | Pytest | 3 |
| Backend - Delete All | Pytest | 2 |
| Total | 24 tests |
5. Phase 3 : Livraison Continue (CD)
5.1 Processus de Déploiement Automatique

5.2 Images Docker

| Image | Base | Taille | Architectures |
|---|---|---|---|
ssssssss3/quiz-api | python:3.9-alpine | ~150 MB | amd64, arm64 |
ssssssss3/quiz-ui | nginx:alpine | ~25 MB | amd64, arm64 |
6. Phase 4 : Déploiement Kubernetes
6.1 Architecture du Cluster

6.2 Manifests Kubernetes
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: quiz-config
data:
FLASK_ENV: "production"
FLASK_DEBUG: "0"
VITE_API_URL: "http://quiz-backend:5000"Secrets
apiVersion: v1
kind: Secret
metadata:
name: quiz-secrets
type: Opaque
data:
SECRET_KEY: <base64>
ADMIN_PASSWORD: <base64>6.3 Ressources et Limites

6.4 Health Checks (Probes)

| Probe | Backend | Frontend |
|---|---|---|
| Liveness | GET / :5000 every 30s | GET / :80 every 30s |
| Readiness | GET / :5000 every 10s | GET / :80 every 10s |
| Initial Delay | 15s | 5s |
7. Base de Données
7.1 Schéma de la Base de Données

7.2 Opérations CRUD

8. Scripts d’Automatisation
8.1 Vue d’Ensemble des Scripts

8.2 Détail des Scripts
| Script | But | Commande |
|---|---|---|
start-cd.sh | Setup complet en une commande | ./scripts/start-cd.sh |
setup-minikube.sh | Configure Minikube (4GB, 2 CPUs) | ./scripts/setup-minikube.sh |
deploy.sh | Déploie tous les manifests K8s | ./scripts/deploy.sh |
auto-deploy.sh | Watcher pour CD automatique | ./scripts/auto-deploy.sh |
9. Sécurité
9.1 Matrice de Sécurité

9.2 Bonnes Pratiques Implémentées
| Aspect | Implémentation |
|---|---|
| Secrets GitHub | Variables chiffrées dans Settings |
| Secrets K8s | Encodés en base64 |
| Auth API | JWT avec expiration |
| Images Docker | Tags immuables (SHA) |
| Réseau | Backend non exposé publiquement |
10. Guide de Déploiement
10.1 Prérequis

10.2 Installation Pas à Pas
git clone https://github.com/ilyasgdo/Projet-Full-Stack-ESIEE-2025-Ilyas-Cyprien.git
cd Projet-Full-Stack-ESIEE-2025-Ilyas-Cyprien
./scripts/start-cd.sh
./scripts/auto-deploy.sh
minikube service quiz-frontend --url10.3 Commandes Utiles
# Status des pods
kubectl get pods -l app=quiz
# Logs backend
kubectl logs -l component=backend -f
# Logs frontend
kubectl logs -l component=frontend -f
# Dashboard Kubernetes
minikube dashboard
# Redémarrer les déploiements
kubectl rollout restart deployment/quiz-backend
kubectl rollout restart deployment/quiz-frontend11. Conclusion
11.1 Récapitulatif du Projet

11.2 Objectifs Atteints
| Objectif | Statut | Détails |
|---|---|---|
| Application Web Full Stack | ✅ | Flask + Vue 3 + SQLite |
| Tests Automatisés | ✅ | 24 tests (Vitest + Pytest) |
| Pipeline CI/CD | ✅ | GitHub Actions |
| Images Docker | ✅ | Multi-arch (amd64/arm64) |
| Déploiement K8s | ✅ | Minikube avec manifests |
| Opérations CRUD | ✅ | Create, Read, Update, Delete |
| Documentation | ✅ | README + Rapport technique |