Ce projet démontre un pipeline CI/CD complet pour déployer des microservices sur Kubernetes en utilisant GitLab CI/CD et Helm. Il met en valeur les pratiques DevOps modernes, notamment :
- Conteneurisation avec Docker
- Orchestration avec Kubernetes
- Gestion des packages avec Helm
- Automatisation CI/CD avec GitLab
- Déploiements multi-environnements (développement, QA, préproduction, production)
- Architecture microservices avec modèle de Passerelle API
L'application se compose de trois microservices :
- Service Passerelle : Passerelle API pour le routage et l'authentification
- Service Utilisateur : Gère l'authentification et les profils utilisateurs
- Service Commande : Gère les commandes
L'application suit une architecture de microservices :
- Service Passerelle : Agit comme une passerelle API pour gérer les requêtes, l'authentification et le routage
- Service Utilisateur : Gère l'authentification et les profils utilisateurs
- Service Commande : Gère les commandes
| Environnement | Objectif | Mise à l'échelle | Accès |
|---|---|---|---|
| Développement | Tests de développement | 1 réplique | Interne |
| QA | Assurance qualité | 2 répliques | Interne |
| Préproduction | Validation avant production | 3 répliques | Interne |
| Production | Environnement en direct | 3+ répliques | Public (avec approbation manuelle) |
- Backend : Python FastAPI
- Conteneurisation : Docker
- Orchestration : Kubernetes
- Gestion des Packages : Helm
- CI/CD : GitLab CI/CD
- Authentification : JWT
- Communication entre Services : API REST
Le pipeline GitLab CI/CD comprend les étapes suivantes :
- Test : Exécuter les tests unitaires pour tous les services
- Construction : Construire les images Docker pour tous les microservices
- Exécution : Vérifier que les images Docker peuvent fonctionner correctement
- Déploiement : Déployer dans les environnements appropriés selon la branche/commit
- Docker et Docker Compose
- Cluster Kubernetes (ou Minikube pour le développement local)
- kubectl configuré pour votre cluster
- Helm 3
# Cloner le dépôt
git clone https://gitlab.com/jh.hunt3r/gitlab-devop-exam.git
cd gitlab-devop-exam
# Exécuter avec docker-compose pour le développement local
docker-compose up -d# Environnement de développement
helm install app-dev --namespace dev ./helm/charts/dev/ -f ./helm/charts/dev/values.yaml
# Environnement QA
helm install app-qa --namespace qa ./helm/charts/qa/ -f ./helm/charts/qa/values.yaml
# Environnement de préproduction
helm install app-staging --namespace staging ./helm/charts/staging/ -f ./helm/charts/staging/values.yaml
# Environnement de production (nécessite des approbations appropriées)
helm install app-prod --namespace prod ./helm/charts/prod/ -f ./helm/charts/prod/values.yamlLa documentation API est disponible via Swagger UI lors de l'exécution des services :
- Service Passerelle : http://localhost:31100/docs
- Service Utilisateur : http://localhost:8001/docs
- Service Commande : http://localhost:8002/docs
Les services incluent des endpoints de vérification de santé et sont configurés pour la surveillance avec Prometheus et Grafana en production.
- Authentification basée sur JWT
- Gestion des secrets avec Kubernetes secrets
- Contrôle d'accès basé sur les rôles
- Configurations spécifiques à l'environnement
.
├── .gitlab-ci.yml # Configuration du pipeline GitLab CI/CD
├── docker-compose.yml # Configuration pour développement local
├── README.md # Documentation du projet
├── services/ # Tous les microservices
│ ├── gateway/ # Service Passerelle
│ │ ├── Dockerfile # Instructions de build Docker
│ │ ├── requirements.txt # Dépendances Python
│ │ └── src/ # Code source
│ ├── user/ # Service Utilisateur
│ │ ├── Dockerfile
│ │ ├── requirements.txt
│ │ └── src/
│ └── order/ # Service Commande
│ ├── Dockerfile
│ ├── requirements.txt
│ └── src/
├── helm/ # Charts Helm pour déploiement Kubernetes
│ ├── charts/ # Charts par environnement
│ │ ├── dev/
│ │ ├── qa/
│ │ ├── staging/
│ │ └── prod/
│ └── templates/ # Templates Helm réutilisables
└── k8s/ # Configurations Kubernetes brutes
├── namespaces/ # Définitions des namespaces
├── secrets/ # Templates de secrets
└── configmaps/ # ConfigMaps pour configuration


