fix: reorder stages - SonarQube (quality) before Tests

- SonarQube analysis runs first for code quality
- Tests run after for code validation

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
soufiane 2025-12-02 00:58:47 +01:00
parent 5e5e5c0a71
commit de9e4cd337

61
Jenkinsfile vendored
View File

@ -130,7 +130,34 @@ pipeline {
} }
// ===================================================================== // =====================================================================
// ÉTAPE 4 : LINT & TESTS // ÉTAPE 4 : SONARQUBE - Qualité de code
// ---------------------------------------------------------------------
// Analyse statique du code pour détecter :
// - Bugs potentiels
// - Vulnérabilités de sécurité
// - Code smells (mauvaises pratiques)
// - Duplications de code
// =====================================================================
stage('📊 SonarQube Analysis') {
agent {
docker {
image 'sonarsource/sonar-scanner-cli:latest'
args '-u root'
}
}
steps {
echo "📊 Analyse SonarQube - Qualité de code..."
withSonarQubeEnv('SonarQube') {
sh """
sonar-scanner
"""
}
echo "✅ Analyse SonarQube terminée"
}
}
// =====================================================================
// ÉTAPE 5 : LINT & TESTS
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// ESLint : Vérifie le style et les erreurs de code // ESLint : Vérifie le style et les erreurs de code
// Jest : Exécute les tests unitaires et d'intégration // Jest : Exécute les tests unitaires et d'intégration
@ -150,9 +177,6 @@ pipeline {
def lintStatus = sh(script: 'npm run lint', returnStatus: true) def lintStatus = sh(script: 'npm run lint', returnStatus: true)
def testStatus = sh(script: 'npm test -- --coverage', returnStatus: true) def testStatus = sh(script: 'npm test -- --coverage', returnStatus: true)
// Stash coverage report for SonarQube
stash includes: 'coverage/**', name: 'coverage', allowEmpty: true
if (lintStatus != 0) { if (lintStatus != 0) {
error "❌ ESLint a échoué - Corrigez les erreurs de style" error "❌ ESLint a échoué - Corrigez les erreurs de style"
} }
@ -164,35 +188,6 @@ pipeline {
} }
} }
// =====================================================================
// ÉTAPE 5 : SONARQUBE
// ---------------------------------------------------------------------
// Analyse statique du code pour détecter :
// - Bugs potentiels
// - Vulnérabilités de sécurité
// - Code smells (mauvaises pratiques)
// - Couverture de code insuffisante
// =====================================================================
stage('📊 SonarQube Analysis') {
agent {
docker {
image 'sonarsource/sonar-scanner-cli:latest'
args '-u root'
}
}
steps {
// Unstash coverage report from tests
unstash 'coverage'
echo "📊 Analyse SonarQube en cours avec rapport de couverture..."
withSonarQubeEnv('SonarQube') {
sh """
sonar-scanner
"""
}
echo "✅ Analyse SonarQube terminée"
}
}
// ===================================================================== // =====================================================================
// ÉTAPE 6 : BUILD IMAGE DOCKER // ÉTAPE 6 : BUILD IMAGE DOCKER
// --------------------------------------------------------------------- // ---------------------------------------------------------------------