unitarias tool pruebas plugin maven jenkins sonarqube jacoco

maven - tool - SonarQube no recoge la cobertura de prueba unitaria



cobertura tool (5)

Basado en https://github.com/SonarSource/sonar-examples/blob/master/projects/tycho/pom.xml , el siguiente POM funciona para mí:

<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>

  • Establecer el archivo de destino en la ruta del informe garantiza que Sonar lea exactamente el archivo que genera JaCoCo.
  • La ruta del informe debe estar fuera de los directorios de los proyectos para tener en cuenta la cobertura entre proyectos (por ejemplo, en el caso de Tycho, donde la convención debe tener proyectos separados para las pruebas).
  • La configuración reuseReports evita la eliminación del archivo de informe JaCoCo antes de que se lea. (Desde 4.3, este es el valor predeterminado y está en desuso).

Entonces solo corro

mvn clean install mvn sonar:sonar

Estoy teniendo problemas con el sonar que recoge el informe de análisis de jacoco. Sin embargo, Jenkins puede recoger el informe y mostrar los resultados. Mi proyecto es una construcción maven, construida por Jenkins. El informe de jacoco es generado por maven (configurado en el pom). Sonar se ejecuta utilizando el plugin Jenkins.

Esto es lo que veo en SonarQube:

Este es el informe que puedo ver del proyecto en jenkins.

La configuración del complemento 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>

Configuración de Jenkins Sonar Plugin


Incluye los complementos sunfire y jacoco en el pom.xml y ejecuta el comando maven como se indica a continuación.

mvn jacoco: prepare-agent jacoco: informe 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>


Jenkins no muestra los resultados de cobertura, ya que es un problema de compatibilidad de versiones entre el plugin jenkins jacoco y el plugin maven jacoco. Por mi parte, lo arreglé usando una versión más reciente del plugin maven jacoco

<build> <pluginManagement> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.9</version> </plugin> <plugins> <pluginManagement> <build>


Te faltaban algunas propiedades de sonar importantes. Aquí hay una muestra de uno de mis compilaciones:

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

El error en la salida de la consola de Jenkins puede ser bastante útil para que la cobertura del código funcione.

La cobertura del proyecto se establece en 0% ya que no hay directorios con clases.
Indica que no ha configurado correctamente la propiedad Sonar.Binaries

No hay información sobre la cobertura por prueba
Indica que no ha configurado correctamente la propiedad Sonar.Tests

La información de cobertura no fue recopilada. ¿Quizás olvidó incluir información de depuración en clases compiladas? Indica que la propiedad sonar.binaries se estableció correctamente, pero esos archivos no se compilaron en modo de depuración, y deben ser


Tuve el problema similar, cobertura del 0.0% y pruebas de unidades no cuentan en el tablero Sonar con SonarQube 6.7.2: Maven: 3.5.2, Java: 1.8, Jacoco: trabajado con 7.0 / 7.9 / 8.0, sistema operativo: Windows

Después de muchas dificultades para encontrar la solución correcta en el proyecto multi-módulo maven, no es como un proyecto de módulo único aquí, tenemos que decir para elegir informes de jacoco de módulos individuales y fusionarlo en un solo informe, así resolvió el problema con esta configuración ya que mi padre se ve me gusta:

<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>

He intentado algunas otras opciones como jacoco-aggregate e incluso la creación de un submódulo al incluir eso en el pom padre, pero nada funcionó realmente y esto es simple. Veo en los registros <sonar.jacoco.reportPath> está en desuso, pero sigue funcionando como está y parece que se reemplazó automáticamente en la ejecución o se puede actualizar manualmente a <sonar.jacoco.reportPaths> o más reciente. Una vez realizada la configuración en cmd, comience con mvn clean install y luego mvn org.jacoco: jacoco-maven-plugin: prepare-agent install (Compruebe en la carpeta de destino del proyecto si jacoco.exec se ha creado) y luego mvn sonar: sonar , esto es lo que he intentado, por favor avíseme si hay alguna otra solución mejor disponible. Espero que esto ayude !! Si no, publique su pregunta ...