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

Posts les plus consultés de ce blog

ISO: liens & outils utiles

NodeJs et SSL: une petite analyse

Créer sa commande slack en quelques minutes