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:
-
jacoco
a la lista de complementos enpom.xml
. - Se agregaron trabajos de páginas a mi archivo
.gitlab-ci.yml
. -
Total.*?([0-9]{1,3})%
agregadoTotal.*?([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.