📚 Rapport Technique CI/CD - Projet Qrious Quiz

image.png

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

  1. Introduction
  2. Architecture Globale
  3. Phase 1 : Application Web
  4. Phase 2 : Intégration Continue (CI)
  5. Phase 3 : Livraison Continue (CD)
  6. Phase 4 : Déploiement Kubernetes
  7. Base de Données
  8. Scripts d’Automatisation
  9. Sécurité
  10. Guide de Déploiement
  11. 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.png

1.3 Objectifs Pédagogiques

ObjectifImplé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.png

2.2 Flux de Données

3.png


3. Phase 1 : Application Web

3.1 Architecture de l’Application

4.png

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

5.png


4. Phase 2 : Intégration Continue (CI)

4.1 Pipeline GitHub Actions

6.png

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-arch

4.3 Couverture des Tests

7.png

CatégorieFrameworkNombre de Tests
Frontend - ComposantsVitest2
Frontend - ServicesVitest2
Backend - Health CheckPytest2
Backend - AuthPytest3
Backend - CRUD QuestionsPytest8
Backend - ParticipationsPytest3
Backend - Delete AllPytest2
Total24 tests

5. Phase 3 : Livraison Continue (CD)

5.1 Processus de Déploiement Automatique

8.png

5.2 Images Docker

9.png

ImageBaseTailleArchitectures
ssssssss3/quiz-apipython:3.9-alpine~150 MBamd64, arm64
ssssssss3/quiz-uinginx:alpine~25 MBamd64, arm64

6. Phase 4 : Déploiement Kubernetes

6.1 Architecture du Cluster

10.png

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

11.png

6.4 Health Checks (Probes)

12.png

ProbeBackendFrontend
LivenessGET / :5000 every 30sGET / :80 every 30s
ReadinessGET / :5000 every 10sGET / :80 every 10s
Initial Delay15s5s

7. Base de Données

7.1 Schéma de la Base de Données

13.png

7.2 Opérations CRUD

14.png


8. Scripts d’Automatisation

8.1 Vue d’Ensemble des Scripts

15.png

8.2 Détail des Scripts

ScriptButCommande
start-cd.shSetup complet en une commande./scripts/start-cd.sh
setup-minikube.shConfigure Minikube (4GB, 2 CPUs)./scripts/setup-minikube.sh
deploy.shDéploie tous les manifests K8s./scripts/deploy.sh
auto-deploy.shWatcher pour CD automatique./scripts/auto-deploy.sh

9. Sécurité

9.1 Matrice de Sécurité

16.png

9.2 Bonnes Pratiques Implémentées

AspectImplémentation
Secrets GitHubVariables chiffrées dans Settings
Secrets K8sEncodés en base64
Auth APIJWT avec expiration
Images DockerTags immuables (SHA)
RéseauBackend non exposé publiquement

10. Guide de Déploiement

10.1 Prérequis

17.png

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 --url

10.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-frontend

11. Conclusion

11.1 Récapitulatif du Projet

18.png

11.2 Objectifs Atteints

ObjectifStatutDétails
Application Web Full StackFlask + Vue 3 + SQLite
Tests Automatisés24 tests (Vitest + Pytest)
Pipeline CI/CDGitHub Actions
Images DockerMulti-arch (amd64/arm64)
Déploiement K8sMinikube avec manifests
Opérations CRUDCreate, Read, Update, Delete
DocumentationREADME + Rapport technique

📎 Annexes

A. Liens Utiles

B. Références

0 items under this folder.