pipeline { agent any environment { REGISTRY = "registry.wk-archi-o24a-15m-g3.fr" IMAGE_NAME = "the-tip-top-backend" APP_PATH = "/srv/devops/the-tip-top" DEPLOY_HOST = "localhost" } stages { stage('Checkout') { steps { echo "📩 RĂ©cupĂ©ration du code source..." checkout scm } } stage('Build Docker image') { steps { echo "🐳 Construction de l’image Docker backend..." sh ''' docker build -t $REGISTRY/$IMAGE_NAME:${BUILD_NUMBER} . docker tag $REGISTRY/$IMAGE_NAME:${BUILD_NUMBER} $REGISTRY/$IMAGE_NAME:latest ''' } } stage('Push to Registry') { steps { echo "đŸ“€ Envoi de l’image vers le registre privĂ©..." withCredentials([usernamePassword(credentialsId: 'registry-credentials', usernameVariable: 'REG_USER', passwordVariable: 'REG_PASS')]) { sh ''' echo "$REG_PASS" | docker login $REGISTRY -u $REG_USER --password-stdin docker push $REGISTRY/$IMAGE_NAME:${BUILD_NUMBER} docker push $REGISTRY/$IMAGE_NAME:latest ''' } } } stage('Deploy') { steps { echo "🚀 DĂ©ploiement du backend..." sh ''' if [ ! -f $APP_PATH/docker-compose.yml ]; then echo "❌ Fichier docker-compose.yml introuvable !" >&2 exit 1 fi cd $APP_PATH docker compose pull backend docker compose up -d --force-recreate backend ''' } } stage('Health Check') { steps { echo "đŸ©ș VĂ©rification du backend aprĂšs dĂ©ploiement..." script { def statusCode = sh( script: "curl -k -s -o /dev/null -w '%{http_code}' https://api.dsp5-archi-o24a-15m-g3.fr || echo 000", returnStdout: true ).trim() if (statusCode != '200') { error("❌ Health check Ă©chouĂ© - code HTTP ${statusCode}") } else { echo "✅ Health check rĂ©ussi - backend opĂ©rationnel !" } } } } } post { success { echo "✅ DĂ©ploiement backend terminĂ© avec succĂšs !" } failure { echo "❌ Échec du pipeline backend." } } }