revert: use same Jenkinsfile structure as backend

Align frontend pipeline structure with backend:
- Parallel execution of Lint & Tests and SonarQube
- Same stage naming and organization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
soufiane 2025-12-01 23:41:34 +01:00
parent 72bdd21743
commit e0d851eb67

119
Jenkinsfile vendored
View File

@ -9,8 +9,7 @@
* 1. Init - Détection de l'environnement (dev/preprod/prod) * 1. Init - Détection de l'environnement (dev/preprod/prod)
* 2. Checkout - Récupération du code source depuis Git * 2. Checkout - Récupération du code source depuis Git
* 3. Install - Installation des dépendances Node.js * 3. Install - Installation des dépendances Node.js
* 4a. Lint & Tests - ESLint + Jest avec couverture de code * 4. Quality - Vérification qualité (ESLint + Jest + SonarQube)
* 4b. SonarQube - Analyse statique (après tests pour avoir la couverture)
* 5. Build - Construction de l'image Docker (avec variables env) * 5. Build - Construction de l'image Docker (avec variables env)
* 6. Push - Envoi de l'image vers le registre Docker privé * 6. Push - Envoi de l'image vers le registre Docker privé
* 7. Deploy - Déploiement sur le serveur cible * 7. Deploy - Déploiement sur le serveur cible
@ -131,67 +130,73 @@ pipeline {
} }
// ===================================================================== // =====================================================================
// ÉTAPE 4a : LINT & TESTS // ÉTAPE 4 : CONTRÔLES QUALITÉ (Exécution parallèle)
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// ESLint : Vérifie le style et les erreurs de code // Exécute en parallèle :
// Jest : Exécute les tests unitaires React/Next.js // - Lint & Tests : ESLint + Jest avec couverture de code
// Couverture : Génère un rapport de couverture (lcov) // - SonarQube : Analyse statique de la qualité du code
// ===================================================================== // =====================================================================
stage('🧪 Lint & Tests') { stage('🔍 Quality - Contrôles qualité') {
agent { parallel {
docker { // -------------------------------------------------------------
image 'node:20' // 4a. LINT & TESTS
args "-u root -v ${NPM_CACHE}:/root/.npm" // -------------------------------------------------------------
} // ESLint : Vérifie le style et les erreurs de code
} // Jest : Exécute les tests unitaires React/Next.js
steps { // Couverture : Génère un rapport de couverture (lcov)
unstash 'node_modules' // -------------------------------------------------------------
echo "🧪 Lancement ESLint et Jest..." stage('🧪 Lint & Tests') {
script { agent {
def lintStatus = sh(script: 'npm run lint', returnStatus: true) docker {
def testStatus = sh(script: 'npm test', returnStatus: true) image 'node:20'
args "-u root -v ${NPM_CACHE}:/root/.npm"
if (lintStatus != 0) { }
error "❌ ESLint a échoué - Corrigez les erreurs de style"
} }
if (testStatus != 0) { steps {
error "❌ Les tests ont échoué - Vérifiez les tests unitaires" unstash 'node_modules'
} echo "🧪 Lancement ESLint et Jest..."
echo "✅ Lint et tests passés avec succès" script {
} def lintStatus = sh(script: 'npm run lint', returnStatus: true)
// Stash coverage report for SonarQube def testStatus = sh(script: 'npm test', returnStatus: true)
stash includes: 'coverage/**', name: 'coverage'
}
}
// ===================================================================== if (lintStatus != 0) {
// ÉTAPE 4b : SONARQUBE error "❌ ESLint a échoué - Corrigez les erreurs de style"
// --------------------------------------------------------------------- }
// Analyse statique du code pour détecter : if (testStatus != 0) {
// - Bugs potentiels error "❌ Les tests ont échoué - Vérifiez les tests unitaires"
// - Vulnérabilités de sécurité }
// - Code smells (mauvaises pratiques) echo "✅ Lint et tests passés avec succès"
// - Couverture de code insuffisante }
// - Duplications de code }
// NOTE: Exécuté APRÈS les tests pour avoir accès au rapport de couverture
// =====================================================================
stage('📊 SonarQube Analysis') {
agent {
docker {
image 'sonarsource/sonar-scanner-cli:latest'
args '-u root'
} }
}
steps { // -------------------------------------------------------------
// Unstash coverage report from tests // 4b. SONARQUBE
unstash 'coverage' // -------------------------------------------------------------
echo "📊 Analyse SonarQube en cours..." // Analyse statique du code pour détecter :
withSonarQubeEnv('SonarQube') { // - Bugs potentiels
sh """ // - Vulnérabilités de sécurité
sonar-scanner // - Code smells (mauvaises pratiques)
""" // - Couverture de code insuffisante
// - Duplications de code
// -------------------------------------------------------------
stage('📊 SonarQube Analysis') {
agent {
docker {
image 'sonarsource/sonar-scanner-cli:latest'
args '-u root'
}
}
steps {
echo "📊 Analyse SonarQube en cours..."
withSonarQubeEnv('SonarQube') {
sh """
sonar-scanner
"""
}
echo "✅ Analyse SonarQube terminée"
}
} }
echo "✅ Analyse SonarQube terminée"
} }
} }