From db83f0d06f903aab1f325970bc0e032d62e58c68 Mon Sep 17 00:00:00 2001 From: soufiane Date: Tue, 4 Nov 2025 15:46:54 +0100 Subject: [PATCH] Fix Jenkinsfile syntax (clean comments) --- Jenkinsfile | 52 +++++++++++++++++++++++++++++++++++++++++++--------- index.js | 2 +- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 56fdf615..f7618219 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,22 +19,26 @@ pipeline { stage('Init') { steps { script { - def currentBranch = sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim() - echo "🧭 Branche détectée : ${currentBranch}" + def branch = sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim() + echo "🧭 Branche détectée : ${branch}" - if (["dev", "preprod", "main"].contains(currentBranch)) { - env.ENV = (currentBranch == "main") ? "prod" : currentBranch + if (["dev", "preprod", "main"].contains(branch)) { + env.ENV = (branch == "main") ? "prod" : branch } else { env.ENV = params.ENV ?: "dev" } env.TAG = "${env.ENV}-latest" env.DEPLOY_PATH = "/srv/devops/the-tip-top/${env.ENV}" + env.DOMAIN = (env.ENV == 'dev') ? "api.dev.dsp5-archi-o24a-15m-g3.fr" : + (env.ENV == 'preprod') ? "api.preprod.dsp5-archi-o24a-15m-g3.fr" : + "api.dsp5-archi-o24a-15m-g3.fr" echo """ 🌍 Environnement = ${env.ENV} 🏷️ Tag Docker = ${env.TAG} 📂 Chemin de déploiement = ${env.DEPLOY_PATH} + 🌐 Domaine = ${env.DOMAIN} """ sh "ls -l ${env.DEPLOY_PATH} || echo '⚠️ Dossier non accessible depuis Jenkins'" @@ -57,15 +61,28 @@ pipeline { } } steps { - echo "🧪 Lancement des tests et analyse..." + echo "🧪 Lancement des tests et de la qualité du code..." sh ''' npm ci - npm run lint || echo "⚠️ Erreurs de lint détectées" - npm test || echo "⚠️ Tests échoués — ignorés pour le déploiement" + npm run lint + npm test ''' } } + stage('Analyse Qualité (optionnelle)') { + when { + expression { env.ENV != 'dev' } // exécuter Sonar uniquement en preprod/prod + } + steps { + echo "🔍 Analyse qualité via SonarQube (placeholder)..." + // Exemple : + // withSonarQubeEnv('SonarQube') { + // sh 'npm run sonar' + // } + } + } + stage('Build Docker image') { steps { echo "🐳 Construction de l’image Docker backend..." @@ -89,6 +106,25 @@ pipeline { } } + stage('Backup before deploy') { + steps { + echo "💾 Sauvegarde de l’environnement ${env.ENV} avant déploiement..." + sh """ + BACKUP_DIR="/srv/backups/the-tip-top/${env.ENV}/$(date +%F_%H-%M-%S)" + mkdir -p $BACKUP_DIR + echo "📦 Sauvegarde du docker-compose et logs..." + cp -r ${DEPLOY_PATH}/docker-compose.yml $BACKUP_DIR/ + cp -r ${DEPLOY_PATH}/logs $BACKUP_DIR/ || true + tar -czf ${BACKUP_DIR}.tar.gz -C $(dirname $BACKUP_DIR) $(basename $BACKUP_DIR) + rm -rf $BACKUP_DIR + echo "✅ Sauvegarde compressée : ${BACKUP_DIR}.tar.gz" + + # (Optionnel) transfert distant : + # scp ${BACKUP_DIR}.tar.gz backup@backup-server:/backups/the-tip-top/${env.ENV}/ + """ + } + } + stage('Deploy') { steps { echo "🚀 Déploiement sur ${env.ENV}..." @@ -99,8 +135,6 @@ pipeline { """ } } - - } post { diff --git a/index.js b/index.js index 4b62dcb7..a8914fcb 100644 --- a/index.js +++ b/index.js @@ -22,7 +22,7 @@ app.use(express.json()); // ✅ Route racine (pour test ou monitoring) app.get("/", (req, res) => { - res.status(200).json({ message: "✅ API The Tip Top en ligne et opérationnelle dev !" }); + res.status(200).json({ message: "✅ API The Tip Top en ligne et opérationnelle branche dev !" }); }); // Vérif base de données app.get("/db-check", async (req, res) => {