Initial commit
This commit is contained in:
294
deploy.sh
Normal file
294
deploy.sh
Normal file
@@ -0,0 +1,294 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 🚀 Script de déploiement automatisé BTPXpress Server
|
||||
# Auteur: BTPXpress Team
|
||||
# Version: 1.0.0
|
||||
|
||||
set -e # Arrêter en cas d'erreur
|
||||
|
||||
# Couleurs pour les logs
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
APP_NAME="btpxpress-server"
|
||||
VERSION="1.0.0"
|
||||
DOCKER_IMAGE="$APP_NAME:$VERSION"
|
||||
DOCKER_REGISTRY="registry.lions.dev"
|
||||
NAMESPACE="btpxpress"
|
||||
|
||||
# Fonctions utilitaires
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Vérification des prérequis
|
||||
check_prerequisites() {
|
||||
log_info "Vérification des prérequis..."
|
||||
|
||||
# Vérifier Java
|
||||
if ! command -v java &> /dev/null; then
|
||||
log_error "Java n'est pas installé"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier Maven
|
||||
if ! command -v mvn &> /dev/null; then
|
||||
log_error "Maven n'est pas installé"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
log_error "Docker n'est pas installé"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Tous les prérequis sont satisfaits"
|
||||
}
|
||||
|
||||
# Exécution des tests
|
||||
run_tests() {
|
||||
log_info "Exécution des tests..."
|
||||
|
||||
# Tests unitaires
|
||||
log_info "Exécution des tests unitaires..."
|
||||
mvn test -Punit-tests-only -q
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Tests unitaires réussis"
|
||||
else
|
||||
log_error "Échec des tests unitaires"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Tests d'intégration
|
||||
log_info "Exécution des tests d'intégration..."
|
||||
mvn test -Pintegration-tests -q
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Tests d'intégration réussis"
|
||||
else
|
||||
log_warning "Certains tests d'intégration ont échoué, mais le déploiement continue"
|
||||
fi
|
||||
}
|
||||
|
||||
# Construction de l'application
|
||||
build_application() {
|
||||
log_info "Construction de l'application..."
|
||||
|
||||
# Nettoyage
|
||||
mvn clean -q
|
||||
|
||||
# Compilation et packaging
|
||||
mvn package -DskipTests -q
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Application construite avec succès"
|
||||
else
|
||||
log_error "Échec de la construction"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Construction de l'image Docker
|
||||
build_docker_image() {
|
||||
log_info "Construction de l'image Docker..."
|
||||
|
||||
# Construction de l'image JVM
|
||||
docker build -f src/main/docker/Dockerfile.jvm -t $DOCKER_IMAGE .
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Image Docker construite: $DOCKER_IMAGE"
|
||||
else
|
||||
log_error "Échec de la construction Docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Tag pour le registry
|
||||
docker tag $DOCKER_IMAGE $DOCKER_REGISTRY/$DOCKER_IMAGE
|
||||
log_success "Image taguée pour le registry: $DOCKER_REGISTRY/$DOCKER_IMAGE"
|
||||
}
|
||||
|
||||
# Déploiement local
|
||||
deploy_local() {
|
||||
log_info "Déploiement local avec Docker Compose..."
|
||||
|
||||
# Arrêter les conteneurs existants
|
||||
docker-compose down 2>/dev/null || true
|
||||
|
||||
# Démarrer les services
|
||||
docker-compose up -d
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Application déployée localement"
|
||||
log_info "Application accessible sur: http://localhost:8080"
|
||||
log_info "Swagger UI: http://localhost:8080/q/swagger-ui"
|
||||
log_info "Health Check: http://localhost:8080/q/health"
|
||||
else
|
||||
log_error "Échec du déploiement local"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Déploiement en production
|
||||
deploy_production() {
|
||||
log_info "Déploiement en production..."
|
||||
|
||||
# Push de l'image vers le registry
|
||||
log_info "Push de l'image vers le registry..."
|
||||
docker push $DOCKER_REGISTRY/$DOCKER_IMAGE
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Image poussée vers le registry"
|
||||
else
|
||||
log_error "Échec du push vers le registry"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Déploiement Kubernetes (si disponible)
|
||||
if command -v kubectl &> /dev/null; then
|
||||
log_info "Déploiement Kubernetes..."
|
||||
kubectl set image deployment/$APP_NAME $APP_NAME=$DOCKER_REGISTRY/$DOCKER_IMAGE -n $NAMESPACE
|
||||
kubectl rollout status deployment/$APP_NAME -n $NAMESPACE
|
||||
log_success "Déploiement Kubernetes terminé"
|
||||
else
|
||||
log_warning "kubectl non disponible, déploiement Kubernetes ignoré"
|
||||
fi
|
||||
}
|
||||
|
||||
# Vérification de santé
|
||||
health_check() {
|
||||
log_info "Vérification de santé de l'application..."
|
||||
|
||||
local max_attempts=30
|
||||
local attempt=1
|
||||
|
||||
while [ $attempt -le $max_attempts ]; do
|
||||
if curl -f http://localhost:8080/q/health >/dev/null 2>&1; then
|
||||
log_success "Application en bonne santé"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "Tentative $attempt/$max_attempts - En attente de l'application..."
|
||||
sleep 2
|
||||
((attempt++))
|
||||
done
|
||||
|
||||
log_error "L'application ne répond pas après $max_attempts tentatives"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Nettoyage
|
||||
cleanup() {
|
||||
log_info "Nettoyage des ressources temporaires..."
|
||||
|
||||
# Supprimer les images Docker non utilisées
|
||||
docker image prune -f >/dev/null 2>&1 || true
|
||||
|
||||
log_success "Nettoyage terminé"
|
||||
}
|
||||
|
||||
# Affichage de l'aide
|
||||
show_help() {
|
||||
echo "🏗️ Script de déploiement BTPXpress Server"
|
||||
echo ""
|
||||
echo "Usage: $0 [OPTION]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " local Déploiement local avec Docker Compose"
|
||||
echo " prod Déploiement en production"
|
||||
echo " test Exécution des tests uniquement"
|
||||
echo " build Construction de l'application uniquement"
|
||||
echo " docker Construction de l'image Docker uniquement"
|
||||
echo " health Vérification de santé uniquement"
|
||||
echo " clean Nettoyage des ressources"
|
||||
echo " help Afficher cette aide"
|
||||
echo ""
|
||||
echo "Exemples:"
|
||||
echo " $0 local # Déploiement local complet"
|
||||
echo " $0 prod # Déploiement en production"
|
||||
echo " $0 test # Tests uniquement"
|
||||
}
|
||||
|
||||
# Fonction principale
|
||||
main() {
|
||||
local command=${1:-"local"}
|
||||
|
||||
case $command in
|
||||
"local")
|
||||
log_info "🚀 Démarrage du déploiement local..."
|
||||
check_prerequisites
|
||||
run_tests
|
||||
build_application
|
||||
build_docker_image
|
||||
deploy_local
|
||||
health_check
|
||||
cleanup
|
||||
log_success "✅ Déploiement local terminé avec succès!"
|
||||
;;
|
||||
"prod")
|
||||
log_info "🚀 Démarrage du déploiement en production..."
|
||||
check_prerequisites
|
||||
run_tests
|
||||
build_application
|
||||
build_docker_image
|
||||
deploy_production
|
||||
cleanup
|
||||
log_success "✅ Déploiement en production terminé avec succès!"
|
||||
;;
|
||||
"test")
|
||||
log_info "🧪 Exécution des tests..."
|
||||
check_prerequisites
|
||||
run_tests
|
||||
log_success "✅ Tests terminés avec succès!"
|
||||
;;
|
||||
"build")
|
||||
log_info "🔨 Construction de l'application..."
|
||||
check_prerequisites
|
||||
build_application
|
||||
log_success "✅ Construction terminée avec succès!"
|
||||
;;
|
||||
"docker")
|
||||
log_info "🐳 Construction de l'image Docker..."
|
||||
check_prerequisites
|
||||
build_docker_image
|
||||
log_success "✅ Image Docker construite avec succès!"
|
||||
;;
|
||||
"health")
|
||||
log_info "🏥 Vérification de santé..."
|
||||
health_check
|
||||
;;
|
||||
"clean")
|
||||
log_info "🧹 Nettoyage..."
|
||||
cleanup
|
||||
;;
|
||||
"help"|"-h"|"--help")
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
log_error "Commande inconnue: $command"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Gestion des signaux
|
||||
trap cleanup EXIT
|
||||
|
||||
# Exécution
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user