web-dev-qa-db-fra.com

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

J'ai besoin de voir le rapport de couverture de code pour un Java maven dans Gitlab. Selon this , this et quelques autres sources:

  1. J'ai ajouté jacoco à la liste des plugins dans pom.xml.
  2. Ajout du travail de pages dans mon fichier .gitlab-ci.yml.
  3. Ajout de 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?

28
AshKan

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

  • Conservez les pièces jacoco dans votre 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.

24
SKBo

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.

10
user9113436

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

3
Maciej

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/
1
Sree