48 votes

Couverture de Jacoco dans le pipeline de Jenkins

Quelqu'un peut-il me dire s'il existe un moyen d'exécuter Jacoco dans un pipeline Jenkins ? J'ai téléchargé le plugin mais je n'ai pas l'option pour Jacoco dans le 'Pipeline Syntax', qui est le Pipeline script aide .

A référencé cette URL : https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin qui n'a pas d'information pour un pipeline jenkins jacoco

0 votes

Si votre outil de construction est Gradle, vous pouvez faire comme ceci : sh "./gradlew jacocoTestReport" publishHTML(target: [reportDir:'build/jacocoHtml', reportFiles: 'index.html', reportName: 'Code Coverage'])

0 votes

Je ne sais pas pourquoi la question est sous-estimée. J'aimerais savoir quelle serait une meilleure façon de poser la question. Je sais comment configurer le plugin Jacoco Jenkins, mais je n'ai trouvé aucune information sur la façon de le faire dans un pipeline. J'ai donc posté dans ce forum. Très déçu :(

0 votes

JaCoCo, c'est jacoco.org/jacoco Vous avez donc probablement reçu un downvote, car le plugin Jenkins JaCoCo n'était pas du tout mentionné au départ ( stackoverflow.com/revisions/41893846/1 ) et la question n'était donc pas claire. Bien que ce soit maintenant mentionné, vous pouvez toujours améliorer le titre et reformuler le corps du texte.

47voto

user2688838 Points 1

La configuration des étapes de jacoco pipeline utilise ce format :

step([$class: 'JacocoPublisher', 
      execPattern: 'target/*.exec',
      classPattern: 'target/classes',
      sourcePattern: 'src/main/java',
      exclusionPattern: 'src/test*'
])

Ou avec une syntaxe plus simple pour le pipeline déclaratif :

jacoco( 
      execPattern: 'target/*.exec',
      classPattern: 'target/classes',
      sourcePattern: 'src/main/java',
      exclusionPattern: 'src/test*'
)

Vous trouverez d'autres options dans la section Référence des étapes du pipeline JaCoCo

33voto

Jeffrey Zampieron Points 475

Après avoir cherché sur Internet un exemple simple de la façon de procéder, j'ai fini par trouver l'outil "step" dans notre instance Jenkins.

Il sait comment générer des extraits de code du pipeline Jenkinsfile en fonction des plugins et des modules que vous avez installés.

En résumé, l'entrée de base ressemble à ceci :

stage('Build') {
     steps {
        sh './jenkins_build.sh'
        junit '*/build/test-results/*.xml'
        step( [ $class: 'JacocoPublisher' ] )
     }
}

La documentation de Jenkins a vraiment besoin d'une mise à jour avec quelques exemples en une ligne.

Example from Jenkins 2.32.x

0 votes

@user5917011 Le graphique du rapport Jacoco est-il disponible sur la page principale du travail ?

0 votes

Vous avez oublié de dire où placer la commande jacoco. Est-ce dans un post, ou dans la scène elle-même ?

18voto

phillipuniverse Points 1615

À partir de la version 2.2.1 du plugin Jacoco, vous pouvez désormais utiliser les éléments suivants jacoco(execPattern: 'target/jacoco.exec')

Personnellement, j'ai plusieurs fichiers Jacoco différents pour différentes exécutions et je voulais prendre en charge à la fois Maven et Gradle (donc build/ et target/ ), j'utilise donc jacoco(execPattern: '**/*.exec') .

Référence : https://github.com/jenkinsci/jacoco-plugin/pull/83

3 votes

ATTENTION : si vous ne spécifiez pas un modèle de classe ou un modèle d'exclusion, Jenkins inclura vos classes de test dans le rapport de couverture, ce qui fausse totalement les chiffres. Pour les constructions gradle, c'est ce que j'utilise maintenant : jacoco(execPattern: '**/build/jacoco/**.exec', classPattern: '**/classes/*/main')

3voto

Godin Points 3870

Si vous jetez un coup d'oeil sur un liste des plugins compatibles avec le pipeline vous verrez que le plugin Jenkins JaCoCo a été rendu compatible mais sans aucune mise à jour de la documentation, sauf entrée dans le journal des modifications :

Version 2.1.0 (29 septembre 2016)

JENKINS-27120 Ajout de la prise en charge du flux de travail pour l'éditeur JaCoCo

probablement parce que son utilisation est simple et similaire à celle de nombreuses autres étapes :

step([$class: 'JacocoPublisher', ...])

1voto

addu390 Points 67

La meilleure façon d'utiliser Jacoco jenkins est de se charger de la génération de l'exécutable ( jacoco.exec ) dans l'application, puis de pointer l'emplacement de ce fichier dans le pipeline. Bien que pour un projet multi-modules, la configuration serait légèrement différente, référez-vous à : Couverture de code Jacoco pour un projet maven multi-modules

Jenkins Pipeline ressemblerait à :

jacoco(
    execPattern: '**/path_to_file/jacoco.exec',
    classPattern: '**/coverage/**',
    sourcePattern: '**/coverage/**',
    inclusionPattern: '**/*.class'
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X