Le SonarQube ne capte pas la couverture des tests unitaires
j'ai des problèmes avec le sonar pour récupérer le rapport d'analyse de jacoco. Jenkins est cependant capable de ramasser le rapport et afficher les résultats. Mon projet est une construction maven, construite par Jenkins. Le rapport jacoco est généré par maven (configuré dans le pom). Sonar est exécuté en utilisant le plugin Jenkins.
voici ce que je vois sur SonarQube:
voici le rapport que je vois du projet en Jenkins.
Le plugin maven pour la config:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.4.201312101107</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Jenkins, Sonar de configuration des plugins
5 réponses
il vous manquait quelques propriétés sonar importantes, voici un échantillon d'une de mes constructions:
sonar.jdbc.dialect=mssql
sonar.projectKey=projectname
sonar.projectName=Project Name
sonar.projectVersion=1.0
sonar.sources=src
sonar.language=java
sonar.binaries=build/classes
sonar.tests=junit
sonar.dynamicAnalysis=reuseReports
sonar.junit.reportsPath=build/test-reports
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPath=build/test-reports/jacoco.exec
l'erreur dans la sortie de la console Jenkins peut être très utile pour obtenir la couverture du code à travailler.
la couverture du projet est fixée à 0% puisqu'il n'y a pas de répertoires avec classes.
indique que vous n'avez pas réglé le Sonar.Propriété binaires correctement
aucune information sur la couverture par test
indique que vous n'avez pas réglé le Sonar.Tester correctement la propriété
les données sur la couverture n'ont pas été recueillies. Peut-être avez-vous oublié d'inclure des informations de débogage dans les classes compilées? Indique que le sonar.la propriété binaires a été définie correctement, mais ces fichiers n'ont pas été compilés en mode debug, et ils doivent être
en Fonction de https://github.com/SonarSource/sonar-examples/blob/master/projects/tycho/pom.xml, les éléments suivants POM fonctionne pour moi:
<properties>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.0.201403182114</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
</configuration>
</plugin>
</plugins>
</build>
- paramétrer le fichier de destination au chemin du rapport garantit que le Sonar lit exactement le fichier généré par JaCoCo.
- le chemin du rapport devrait être en dehors des répertoires des projets pour tenir compte de la couverture croisée des projets (par exemple dans le cas de Tycho où la convention doit avoir des projets séparés pour test.)
reuseReports
le réglage empêche la suppression du fichier de rapport JaCoCo avant qu'il ne soit lu! (Depuis la 4.3, c'est la valeur par défaut et est obsolète.)
Alors je viens de courir
mvn clean install
mvn sonar:sonar
j'ai eu le même problème, 0,0% de couverture et aucun test unitaire compte sur le tableau de bord Sonar avec SonarQube 6.7.2: Maven: 3.5.2, Java: 1.8, Jacoco: a travaillé avec 7.0/7.9/8.0, Système d'exploitation : Windows
après beaucoup de lutte pour trouver la bonne solution sur le projet multi-modules maven, pas comme le projet Mono-module ici, nous devons dire de choisir les rapports jacoco à partir de modules individuels & fusionner à un rapport,donc résolu problème avec cette configuration que mon parent pom regarde comme:
<properties>
<!--Sonar -->
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
j'ai essayé quelques autres options comme jacoco-agrégat & même créer un sous-module en incluant cela dans la pom mère mais rien n'a vraiment fonctionné & c'est simple. Je vois dans les logs <sonar.jacoco.reportPath>
est déprécié, mais fonctionne toujours tel quel et semble comme auto remplacé lors de l'exécution ou peut être mis à jour manuellement vers <sonar.jacoco.reportPaths>
ou plus tard. Une fois que vous avez fait la configuration dans cmd, commencez avec mvn clean install mvn org.jacoco:jacoco-maven-plugin:préparez-agent installer (vérifier dans le dossier cible du projet si jacoco.exec est créé) et ensuite faire sonar mvn: sonar, c'est ce que j'ai essayé s'il vous plaît me faire savoir si une autre meilleure solution disponible.Espérons que cette aide!! Si ce n'est pas le cas, veuillez poster votre question..
Jenkins ne montre pas de résultats de couverture car il s'agit d'un problème de compatibilité de version entre le plugin jacoco de jenkins et le plugin jacoco de maven. De mon côté je l'ai corrigé en utilisant une version plus récente de Maven jacoco plugin
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
</plugin>
<plugins>
<pluginManagement>
<build>
inclure les plugins sunfire et jacoco dans le pom.xml et Exécutez la commande maven comme indiqué ci-dessous.
mvn jacoco:préparez-agent jacoco:rapport de sonar:sonar
<properties>
<surefire.version>2.17</surefire.version>
<jacoco.version>0.7.2.201409121644</jacoco.version>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals><goal>prepare-agent</goal></goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals><goal>report</goal></goals>
</execution>
</executions>
</plugin>
</plugins>