Jenins, Sonar et application Web / JavaScript
Bonjour
Voici un petit exemple de configuration d'un job jenkins (et aussi un peu de son projet Web) afin de lier les résultats de tests et de couverture de code vers Sonar, en prenant bien en comptant certains soucis.
1 - Ne mettez pas d'espaces
Aussi bien dans le nom du projet Jenkins que dans le chemin d'accès aux fichiers Junit / LCOV, vous ne devez pas mettre d'espaces.
Ceci est indispensable, autrement, le plugin Sonar (et en règle générale, les plugins Jenkins) ne trouveront pas les fichiers (car ils ont tendances à ne pas échapper les espaces).
Du coup, dans votre fichier karam.conf.js (par exemple), il est bien de préciser un emplacement "en dur" de vos fichiers de résultats:
{
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
'reporters': ['junit', 'coverage', 'progress'], 'junitReporter': { 'outputDir': './target/reports-junit', 'outputFile': 'karma-report-junit.xml', 'suite': 'unit', 'useBrowserName': false }, 'coverageReporter': { 'dir': './target', 'reporters': [ { 'type': 'cobertura', 'subdir': 'reports-cobertura', 'file': 'report-test-cobertura.xml' }, { 'type': 'lcovonly', 'subdir': 'reports-cobertura', 'file': 'report-test-lcov.info' }, { 'type': 'text-summary' } ] }
}
2 - Gérer les versions
Sonar est en capacité de gérer les résultats et de s'en souvenir par version. Pour cela soit vous devez gérer à la main la mise à jour du fichier "sonar-properties", soit vous pouvez le "générer" côté Jenkins (du coup, il ne traîne pas dans le repo de code, ce qui vous permettre d'être transparent le jour où nous ne souhaitons plus utiliser Sonar)
Pour cela, il faut activer l'injection de variables d'environnements dans votre job jenkins, et utiliser le petit script Groovy suivant:
import groovy.json.JsonSlurper import jenkins.* import jenkins.model.* import hudson.* import hudson.model.* def build = Thread.currentThread().executable def inputFile = new File(build.workspace.toString() + "/package.json") def InputJSON = new JsonSlurper().parseText(inputFile.text) def map = [PACKAGE_VERSION: InputJSON.version] return map
Ce dernier permet de récupérer la version courante du projet, stocké dans le fichier "package.json"
3 - Déclarer la "liaison" vers Sonar
Ajouter un "SonarQube Scanner" dans votre job jenkins avec la configuration suivante:
# Required metadatasonar.language=js sonar.sourceEncoding=UTF-8 sonar.projectKey=my-awesome-project sonar.projectName=my-awesome-project sonar.projectVersion=$PACKAGE_VERSION sonar.sources=./src sonar.tests=./test sonar.exclusions=**/node_modules/**, dist/**, **/bower_components/**, test/**, target/**, Gruntfile.js # Coverage
sonar.javascript.lcov.reportPath=$WORKSPACE/target/reports-cobertura/report-test-lcov.info sonar.javascript.jstestdriver.reportsPath=$WORKSPACE/target/reports-junit/
sonar.surefire.reportsPath=$WORKSPACE/target/reports-junit/
sonar.junit.reportsPath=$WORKSPACE/target/reports-junit/
Cela vous postera les résultats de vos tests (junit et couverture de code) vers votre instance Sonar.
Commentaires
Enregistrer un commentaire