demo-java-app est une application web développée en Java avec Spring Boot. Elle affiche une page d'accueil simple avec un titre et un message, et expose des endpoints pour la supervision. L'application utilise Thymeleaf pour le rendu HTML et peut fournir des métriques pour le monitoring.
Pipeline DevOps complète pour une application Java Spring Boot, incluant :
- ✅ CI/CD avec Jenkins
- ✅ Containerisation avec Docker
- ✅ Déploiement Kubernetes automatisé
- 🚧 Monitoring avec Prometheus/Grafana
- 🔄 Charts Helm (en développement)
- Architecture
- Prérequis
- Installation
- Pipeline CI/CD
- Déploiement Kubernetes
- Monitoring
- Accès à l'application
- Améliorations futures
.
├── demo-java-app/ # Application Spring Boot
│ ├── src/ # Code source Java
│ ├── pom.xml # Configuration Maven
│ └── Dockerfile # Image Docker
├── k8s/ # Manifests Kubernetes
│ ├── deployment.yaml # Déploiement et Service
│ └── servicemonitor.yaml # Configuration Prometheus
├── Jenkinsfile # Pipeline Jenkins
└── helm/ # Charts Helm (à compléter)
- Jenkins avec plugins :
- Docker Pipeline
- Kubernetes CLI
- Credentials Binding
- Git
- Cluster Kubernetes (MicroK8s, K3s, ou cloud)
- Docker Hub compte et credentials
- kubectl installé et configuré
- Helm 3.x (optionnel)
git clone https://github.com/hajarek24/demo-java-app-devops.git
cd demo-java-app-devops# Ajouter les credentials dans Jenkins :
# - Docker Hub : REGISTRY_CREDENTIALS (username/password)
# - Kubernetes : KUBECONFIG (secret file)helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack- Checkout : Récupération du code depuis GitHub
- Build :
mvn clean package- Construction du JAR - Tests :
mvn test- Exécution des tests unitaires - Build Docker : Construction de l'image
hajarek24/demo-java-app:${BUILD_NUMBER} - Push Docker Hub : Publication vers le registry Docker Hub
- Deploy Kubernetes : Mise à jour automatique du déploiement
Le pipeline utilise les variables d'environnement suivantes :
BUILD_NUMBER: Numéro de build Jenkins pour le tag DockerREGISTRY_CREDENTIALS: Credentials Docker HubKUBECONFIG: Configuration d'accès au cluster Kubernetes
✅ Build #10 - SUCCESS
- Image: hajarek24/demo-java-app:10
- Déploiement: demo-java-app configured
- Service: demo-java-app unchanged
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-java-app
spec:
replicas: 2
selector:
matchLabels:
app: demo-java-app
# Service
apiVersion: v1
kind: Service
metadata:
name: demo-java-app
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30081# Vérifier le déploiement
kubectl get pods -l app=demo-java-app
kubectl get svc demo-java-app
# Logs de l'application
kubectl logs -l app=demo-java-app
# Scaling
kubectl scale deployment demo-java-app --replicas=3# ServiceMonitor pour scraping des métriques
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: demo-java-app
spec:
selector:
matchLabels:
app: demo-java-app
endpoints:
- port: http
path: /actuator/metrics/actuator/health- Statut de l'application/actuator/metrics- Métriques Micrometer/actuator/info- Informations sur l'application
- Application : http://localhost:30081
- Health Check : http://localhost:30081/actuator/health
- Pipeline : Jenkins → demo-java-app-test2
- Docker Images : hajarek24/demo-java-app
- Ajouter des tests unitaires et d'intégration réels
- Implémenter les charts Helm complets
- Configurer les health checks Kubernetes
- Ajouter des variables d'environnement pour la configuration
- Pipeline multi-environnement (dev/staging/prod)
- Sécurisation avec RBAC Kubernetes
- Intégration SonarQube pour la qualité du code
- Notifications Slack/Teams sur les déploiements
- GitOps avec ArgoCD
- Service Mesh (Istio)
- Backup et disaster recovery
- Monitoring avancé avec Grafana dashboards
- Dernière version stable :
hajarek24/demo-java-app:10 - Branches :
main(production) - Convention de nommage :
hajarek24/demo-java-app:${BUILD_NUMBER}
- Fork le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Status : ✅ Production Ready - Pipeline fonctionnel avec déploiement automatisé
Dernière mise à jour : Mai 2025