40 votes

Rapport de couverture de code utilisant le fichier gitlab-ci.yml

J'ai besoin de voir le rapport de couverture de code pour un projet java maven dans Gitlab. D'après este , este et d'autres sources :

  1. J'ai ajouté jacoco à la liste des plugins dans pom.xml .
  2. J'ai ajouté le travail des pages à mon .gitlab-ci.yml fichier.
  3. Ajouté Total.*?([0-9]{1,3})% à l'analyse de la couverture du code dans le cadre 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 page de pourcentage de couverture ou de rapport de couverture.

Contenu de .gitlab-ci.yml fichier :

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 dans 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 sont passés avec succès.

Comment puis-je voir les rapports de couverture ?

42voto

SKBo Points 399

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

Ceci étant dit, je ne pense pas que ce soit la meilleure façon de procéder, car vous devez polluer votre sortie avec du HTML brut afin d'obtenir la valeur de couverture souhaitée.

Je recommande d'utiliser plutôt la méthode décrite dans cette demande de retrait : https://github.com/jacoco/jacoco/pull/488

  • Gardez les pièces jacoco dans votre build.xml

  • Utilisez cette instruction awk pour imprimer le total correct de la couverture du code :

    awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/", 
    instructions, "instructions covered"; print 100*covered/instructions, "% 
    covered" }' target/site/jacoco/jacoco.csv
  • Remplacer le regexp du CI Gitlab par ce que l'instruction retourne : \d+.\d+ \% covered

Edit :

Depuis la version 8.17 de Gitlab, vous pouvez définir la regexp directement à l'intérieur de la balise .gitlab-ci.yml comme indiqué dans le documentation .

Cela peut sembler superflu, mais si cette regexp fait maintenant partie de l'historique de votre dépôt, vous pouvez la modifier en même temps que les autres outils utilisés pour la calculer.

0 votes

Si vous utilisez un projet multi-modules, vous pouvez faire awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print 100*covered/instructions, "% tu covered" }' `find . -name "jacoco.csv"`

16voto

user9113436 Points 191

Employé de GitLab ici.

Si votre administrateur a configuré des pages GitLab, vous pouvez voir l'URL vers laquelle votre artefact a été déployé en allant (sur votre projet) à l'adresse suivante Settings -> Pages .

Vous devriez y 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 le support pour les artefacts HTML. Ce numéro et les questions connexes parlent des fonctionnalités existantes et à venir qui peuvent s'étendre sur ce que vous avez construit ici.

4 votes

Merci. J'ai trouvé les pages et le lien vers le fichier html du rapport de couverture. Mais ce fichier ne contient qu'un simple pourcentage de couverture du code. Savez-vous comment je peux voir la couverture du code ? Je veux dire voir le code couvert comme des lignes vertes, les codes non couverts comme des lignes rouges ou quelque chose comme ça ?

15voto

Maciej Points 131

En plus de ce que @SKBo a dit, je voudrais ajouter une petite modification.

Avoir

cat target/site/jacoco/index.html

polluera votre sortie de construction rendant difficile la lecture de ce qui est important.

Je le suggère à :

cat your/path/to/jacoco/report/index.html | grep -o '<tfoot>.*</tfoot>'

Cela permettra de réduire le bruit de manière importante

0 votes

Le lien est maintenant jacoco/report/html/index.html Donc, la commande finale serait cat your/path/to/jacoco/report/html/index.html | grep -o '<tfoot>.*</tfoot>'

5voto

J'utilise ce code :

image: maven:latest

sonarqube-check:
  script:
    - mvn verify sonar:sonar -Dsonar.host.url=$SONAR\_HOST\_URL -Dsonar.login=$SONAR\_TOKEN -Dsonar.qualitygate.wait=true
    - cat target/site/jacoco/index.html | grep -o '.\*'
  allow\_failure: false
  coverage: "/Total.\*?(\[0-9\]{1,3})%/"

3voto

Saljack Points 742

J'utilise cette commande dans .gitlab-ci.yml

cat target/site/jacoco-merge/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'

Cela permet d'imprimer une belle chaîne de caractères sans bavures ni balises html :

Jacoco Coverage Total: 39%

et ensuite vous pouvez utiliser la regex mentionnée dans la documentation de gitlabs :

Total.*?([0-9]{1,3})%

ou vous pouvez utiliser :

Jacoco Coverage Total: ([0-9]{1,3})%

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X