diff --git a/Jenkinsfile b/Jenkinsfile index 4329c5d9..59bfac89 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,7 +5,7 @@ pipeline { choice( name: 'ENV', choices: ['dev', 'preprod', 'prod'], - description: 'Choisir lenvironnement de déploiement' + description: 'Choisir l’environnement de déploiement (automatique si branche correspondante)' ) } @@ -16,7 +16,9 @@ pipeline { stages { - // Stage 1: Initialisation + /* ─────────────────────────────── + * 1️⃣ Init — Détection automatique de l’environnement + * ─────────────────────────────── */ stage('Init') { steps { script { @@ -31,18 +33,32 @@ pipeline { env.TAG = "${env.ENV}-latest" env.DEPLOY_PATH = "/srv/devops/the-tip-top/${env.ENV}" + + echo """ + 🌍 Environnement = ${env.ENV} + 🏷️ Tag Docker = ${env.TAG} + 📂 Chemin de déploiement = ${env.DEPLOY_PATH} + """ + + // Vérifie le répertoire cible + sh "ls -l ${env.DEPLOY_PATH} || echo '⚠️ Dossier non accessible depuis Jenkins'" } } } - // Stage 2: Checkout du code + /* ─────────────────────────────── + * 2️⃣ Checkout du code + * ─────────────────────────────── */ stage('Checkout') { steps { + echo "📦 Récupération du code source depuis Gitea..." checkout scm } } - // Stage 3: Tests et Qualité + /* ─────────────────────────────── + * 3️⃣ Tests & Qualité (dans un conteneur Node.js) + * ─────────────────────────────── */ stage('Tests & Qualité') { agent { docker { @@ -51,15 +67,18 @@ pipeline { } } steps { + echo "🧪 Lancement des tests et analyse de code..." sh ''' npm ci - npm run lint || echo "Erreurs de lint détectées" - npm test || echo "Tests échoués" + npm run lint || echo "⚠️ Erreurs de lint détectées" + npm test || echo "⚠️ Tests échoués — vérifier les logs" ''' } } - // Stage 4: Build Docker image + /* ─────────────────────────────── + * 4️⃣ Build de l’image Docker + * ─────────────────────────────── */ stage('Build Docker image') { steps { dir('the-tip-top-backend') { @@ -71,9 +90,12 @@ pipeline { } } - // Stage 5: Push vers le registre privé + /* ─────────────────────────────── + * 5️⃣ Push vers le registre privé + * ─────────────────────────────── */ stage('Push to Registry') { steps { + echo "📤 Envoi de l’image vers le registre Docker privé..." withCredentials([usernamePassword(credentialsId: 'registry-credentials', usernameVariable: 'REG_USER', passwordVariable: 'REG_PASS')]) { sh """ echo "$REG_PASS" | docker login ${REGISTRY_URL} -u "$REG_USER" --password-stdin @@ -84,9 +106,28 @@ pipeline { } } - // Stage 6: Déploiement + /* ─────────────────────────────── + * 6️⃣ Backup avant déploiement + * ─────────────────────────────── */ + stage('Backup Before Deploy') { + steps { + echo "💾 Exécution du script de sauvegarde avant déploiement..." + sh ''' + if [ -f /srv/devops/the-tip-top/backup.sh ]; then + bash /srv/devops/the-tip-top/backup.sh + else + echo "⚠️ Aucun script backup.sh trouvé." + fi + ''' + } + } + + /* ─────────────────────────────── + * 7️⃣ Déploiement + * ─────────────────────────────── */ stage('Deploy') { steps { + echo "🚀 Déploiement du backend sur ${env.ENV}..." sh """ cd "${DEPLOY_PATH}" docker compose pull backend @@ -95,9 +136,13 @@ pipeline { } } - // Stage 7: Health Check + /* ─────────────────────────────── + * 8️⃣ Vérification de santé (via /health) + * ─────────────────────────────── */ + * ─────────────────────────────── */ stage('Health Check') { steps { + echo "🩺 Vérification du backend après déploiement..." script { def domain = (env.ENV == 'dev') ? "api.dev.dsp5-archi-o24a-15m-g3.fr" : (env.ENV == 'preprod') ? "api.preprod.dsp5-archi-o24a-15m-g3.fr" : @@ -117,4 +162,16 @@ pipeline { } } } + + /* ─────────────────────────────── + * 🔚 Post Actions + * ─────────────────────────────── */ + post { + success { + echo "✅ Pipeline backend ${env.ENV} terminé avec succès !" + } + failure { + echo "❌ Échec du pipeline backend pour ${env.ENV}." + } + } } diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..b50e5018 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,17 @@ +// eslint.config.js +export default [ + { + files: ["**/*.js"], + ignores: ["node_modules/**"], + languageOptions: { + sourceType: "module", + ecmaVersion: "latest", + }, + rules: { + semi: ["error", "always"], + quotes: ["error", "double"], + "no-unused-vars": ["warn"], + "no-console": "off", + }, + }, +]; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..4a932210 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,6 @@ +// jest.config.js +export default { + testEnvironment: "node", + transform: {}, // pas de transpilation Babel ici + verbose: true, +};