J'ai besoin de voir le rapport de couverture de code pour un Java maven dans Gitlab. Selon this , this et quelques autres sources:
jacoco
à la liste des plugins dans pom.xml
..gitlab-ci.yml
.Total.*?([0-9]{1,3})%
à la codification de l'analyse de la couverture dans les paramètres du projet.mais il n'y a pas de rapport de couverture ou du moins je ne le vois pas. Il n'y a pas de pourcentage de couverture ou de page de rapport de couverture.
Contenu du fichier .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
jacoco
plugin in 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>
Mon projet est un projet privé sur gitlab.com
.
Pipeline et ses 4 travaux ont été passés avec succès.
Comment puis-je voir les rapports de couverture?
Il semble que vous ayez oublié d’ajouter les appels à cat
dans votre .gitlab-ci.yml
fichier.
Vous devriez avoir quelque chose comme ça:
script:
- mvn $MAVEN_CLI_OPTS test
- cat target/site/jacoco/index.html
Cela étant dit, je ne pense pas que ce soit la meilleure façon de procéder, car vous devez polluer votre sortie avec du code HTML brut afin de récupérer la valeur de couverture souhaitée.
Je recommanderais d'utiliser la méthode décrite dans cette demande d'extraction à la place: https://github.com/jacoco/jacoco/pull/488
build.xml
Utilisez cette instruction awk pour imprimer le total de couverture de code correct:
awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/",
instructions, "instructions covered"; print 100*covered/instructions, "%
covered" }' target/site/jacoco/jacoco.csv
Remplacez l’expression rationnelle Gitlab CI par ce que l’instruction renvoie: \d+.\d+ \% covered
Modifier:
A partir de Gitlab 8.17, vous pouvez définir l’expression rationnelle directement à l’intérieur du .gitlab-ci.yml
fichier, comme indiqué dans le documentation .
Cela peut sembler superflu, mais si cette expression rationnelle fait maintenant partie de l’historique de votre référentiel, vous pouvez la modifier en même temps que les autres outils utilisés pour la calculer.
Employé GitLab ici.
Si votre administrateur a configuré les pages GitLab, vous pouvez voir l'URL utilisée par votre artefact en accédant (sur votre projet) à Settings
-> Pages
.
Là vous devriez voir:
Félicitations! Vos pages sont servies sous: https://your-namespace.example.com/your-project
Cliquez sur ce lien et vous devriez être prêt à partir! Nous étendons également la prise en charge des artefacts HTML. Ce numéro et ses problèmes associés parlent de fonctionnalités existantes et à venir susceptibles d’être développées par rapport à ce que vous avez construit ici.
En plus de ce que @SKBo a dit, j'aimerais ajouter un petit Tweak.
Ayant
chat cible/site/jacoco/index.html
vous polluera la construction, rendant difficile la lecture de ce qui est important.
Je le suggérerais à:
cat your/path/to/jacoco/report/index.html | grep -o '<tfoot>.*</tfoot>'
Cela réduira le bruit de manière excellente
Ajouter la configuration pour l'objectif prepare-agent
<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>
Et aussi dans le plugin maven-surefire-plugin, ajoutez la propriété suivante sous configuration de
<argLine>surefireArgLine</argLine>
Sur l'exécution de votre objectif de test. Les rapports seront générés. Le fichier jacoco-ut.exec généré ne peut être visualisé qu'à l'aide d'un IDE.
Voici un exemple de projet https://github.com/r-sreesaran/http-patch-jax-rs
Pour plus d'informations, consultez https://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-un-un-and-integration-tests-with-the-jacoco-maven-plugin/
Dans le fichier .gitlab-ci.yml, dans la section "artefacts", adaptez-le en fonction de la configuration du chemin d'accès dans votre pom.xml.
artifacts:
paths:
- target/coverage-reports/