maven gitlab code-coverage gitlab-ci jacoco

maven - Informe de cobertura de código usando el archivo gitlab-ci.yml



code-coverage jacoco (3)

Agregue la configuración para el objetivo preparar agente.

<configuration> <!-- Sets the path to the file which contains the execution data. --> <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile> <!--Sets the name of the property containing the settings for JaCoCo runtime agent.--> <propertyName>surefireArgLine</propertyName> </configuration>

Y también dentro del complemento maven-surefire-plugin, agregue la siguiente propiedad en la configuración de

<argLine>surefireArgLine</argLine>

En la ejecución de su objetivo de prueba. Los informes se generarán. El jacoco-ut.exec generado solo se puede ver usando un IDE.

Aquí está el proyecto de muestra https://github.com/r-sreesaran/http-patch-jax-rs

Para obtener más información, consulte https://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin/

En el archivo .gitlab-ci.yml, en la sección "artefactos", adáptelo de acuerdo con la configuración de ruta en su pom.xml

artifacts: paths: - target/coverage-reports/

Necesito ver el informe de cobertura de código para un proyecto de Java Maven en Gitlab. Según this , this y algunas otras fuentes:

  1. jacoco a la lista de complementos en pom.xml .
  2. Se agregaron trabajos de páginas a mi archivo .gitlab-ci.yml .
  3. Total.*?([0-9]{1,3})% agregado Total.*?([0-9]{1,3})% para codificar el análisis de la cobertura en la configuración del proyecto.

pero no hay ningún informe de cobertura o al menos no puedo verlo. No hay porcentaje de cobertura o página de informe de cobertura.

Contenido del archivo .gitlab-ci.yml :

image: maven:latest variables: MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true" MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true" cache: paths: - .m2/repository/ build: stage: build script: - mvn $MAVEN_CLI_OPTS compile test: stage: test script: - mvn $MAVEN_CLI_OPTS test artifacts: paths: - target/site/jacoco/ pages: stage: deploy dependencies: - test script: - mkdir public - mv target/site/jacoco/index.html public artifacts: paths: - public deploy: stage: deploy script: - mvn $MAVEN_CLI_OPTS verify only: - master

plugin jacoco en pom.xml :

<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.5.201505241946</version> <executions> <execution> <id>pre-unit-test</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>post-unit-test</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>

My Project es un proyecto privado en gitlab.com .

Pipeline y sus 4 trabajos pasaron con éxito.

¿Cómo puedo ver los informes de cobertura?


Empleado de GitLab aquí.

Si su administrador tiene configuradas las páginas de GitLab, puede ver la URL en la que se desplegó su artefacto yendo (en su proyecto) a Settings -> Pages .

Allí deberías ver:

¡Felicidades! Sus páginas se publican en: https://your-namespace.example.com/your-project

¡Haz clic en ese enlace y deberías estar listo! También estamos ampliando el soporte para artefactos HTML. Este problema y sus problemas relacionados hablan sobre las características existentes y futuras que pueden expandirse en lo que ha construido aquí.


Parece que olvidó agregar las llamadas a cat en su archivo .gitlab-ci.yml .

Deberías tener algo así:

script: - mvn $MAVEN_CLI_OPTS test - cat target/site/jacoco/index.html

Dicho esto, no creo que esta sea la mejor forma de hacerlo, ya que necesita contaminar su salida con HTML sin procesar para recuperar el valor de cobertura deseado.

Recomendaría usar el método descrito en esta solicitud de extracción en su lugar: https://github.com/jacoco/jacoco/pull/488

  • Mantenga las partes de jacoco en su build.xml
  • Utilice esta instrucción awk para imprimir el total de cobertura de código correcto:

    awk -F"," ''{ instructions += $4 + $5; covered += $5 } END { print covered, "/", instructions, "instructions covered"; print 100*covered/instructions, "% covered" }'' target/site/jacoco/jacoco.csv

  • Reemplace la expresión regular de Gitlab CI con lo que devuelve la instrucción: /d+./d+ /% covered

Editar:

A partir de Gitlab 8.17, puede definir la .gitlab-ci.yml directamente dentro del archivo .gitlab-ci.yml , como se indica en la documentation .

Puede parecer superfluo, pero si esta expresión regular ahora forma parte de su historial de repositorio, puede cambiarla junto con las otras herramientas utilizadas para computarlo.