J'ai des problèmes avec le sonar lors de la collecte du rapport d'analyse Jacoco. Jenkins est cependant capable de récupérer le rapport et d’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é à l'aide du plugin Jenkins.
Voici ce que je vois sur SonarQube:
C'est le rapport que je peux voir du projet à Jenkins.
La configuration du plugin maven:
<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 Plugin config
Il vous manquait quelques propriétés de sonar importantes. Voici un exemple d’une de mes versions:
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 que la couverture de code fonctionne.
La couverture du projet est définie sur 0% puisqu'il n'y a pas de répertoires avec des classes.
Indique que vous n'avez pas défini correctement la propriété Sonar.Binaries
Aucune information sur la couverture par test
Indique que vous n'avez pas défini correctement la propriété Sonar.Tests
Les informations de couverture n'ont pas été collectées. Peut-être que vous oubliez d'inclure des informations de débogage dans les classes compilées? Indique que la propriété sonar.binaries a été définie correctement, mais que ces fichiers n'ont pas été compilés en mode débogage et qu'ils doivent être
D'après https://github.com/SonarSource/sonar-examples/blob/master/projects/tycho/pom.xml , le POM suivant 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>
reuseReports
empêche la suppression du fichier de rapport JaCoCo avant sa lecture! (Depuis la version 4.3, ceci est la valeur par défaut et est obsolète.)Puis je cours
mvn clean install
mvn sonar:sonar
J'avais le même problème, une couverture de 0,0% et aucun test unitaire ne compte sur le tableau de bord Sonar avec SonarQube 6.7.2: Maven: 3.5.2, Java: 1.8, Jacoco: Fonctionne avec 7.0/7.9/8.0, OS: Windows
Après beaucoup de mal à trouver une solution correcte pour un projet multi-module Maven, mais pas comme un projet à module unique ici, nous devons dire de choisir les rapports jacoco de modules individuels et de les fusionner en un seul rapport, problème résolu avec cette configuration lorsque mon parent pom semble 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-aggreg et même la création d'un sous-module en l'incluant dans le pom parent, mais rien ne fonctionnait vraiment et c'est simple. Je vois dans les journaux que <sonar.jacoco.reportPath>
est obsolète, mais fonctionne toujours tel quel et semble être remplacé automatiquement à l'exécution ou peut être mis à jour manuellement vers <sonar.jacoco.reportPaths>
ou plus tard. Une fois que vous avez terminé l’installation dans cmd, démarrez avec mvn clean install then mvn org.jacoco: plugin jacoco-maven: prepare-agent install (vérifiez dans le dossier cible du projet si jacoco.exec est créé) & do mvn sonar: sonar , c’est ce que j’ai essayé, faites-le moi savoir si une autre solution optimale est disponible.Espoir que cela aide !! Si non, merci de poster votre question ..
Jenkins ne montre pas les résultats de couverture car il s'agit d'un problème de compatibilité de version entre le plugin jenkins jacoco et le plugin maven jacoco . 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>
Incluez les plugins sunfire et jacoco dans les fichiers pom.xml et Exécutez la commande maven comme indiqué ci-dessous.
mvn jacoco: préparer-agent jacoco: rapport 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>