Подтвердить что ты не робот

Отчет о покрытии кода с использованием файла gitlab-ci.yml

Мне нужно увидеть отчет о покрытии кода для проекта java maven в Gitlab. Согласно this, this и некоторые другие источники:

  • Я добавил jacoco в список плагинов в pom.xml.
  • Работа с добавленными страницами в файл .gitlab-ci.yml.
  • Добавлен Total.*?([0-9]{1,3})% для анализа синтаксиса покрытия в настройках проекта.

но нет отчета о покрытии или, по крайней мере, я не вижу его. Нет процентной доли покрытия или отчета о покрытии.

Содержимое файла .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 плагин в 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>

Мой проект - частный проект на gitlab.com.

Трубопровод и все его 4 задания успешно прошли.

Как я могу просмотреть отчеты о покрытиях?

4b9b3361

Ответ 1

Кажется, вы забыли добавить вызовы cat в ваш .gitlab-ci.yml.

У вас должно быть что-то подобное:

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

При этом, я не думаю, что это лучший способ сделать это, так как вам нужно загрязнить ваш вывод необработанным HTML, чтобы получить желаемое значение покрытия.

Я бы порекомендовал использовать метод, описанный в этом запросе, вместо этого: https://github.com/jacoco/jacoco/pull/488.

  • Сохраните части jacoco в вашем build.xml
  • Используйте эту инструкцию на языке awk, чтобы напечатать правильную сумму покрытия кода:

    awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/", 
    instructions, "instructions covered"; print 100*covered/instructions, "% 
    covered" }' target/site/jacoco/jacoco.csv
    
  • Замените регулярное выражение Gitlab CI тем, что возвращает инструкция: \d+.\d+\%covered

Редактировать:

Начиная с Gitlab 8.17, вы можете определить регулярное выражение непосредственно внутри .gitlab-ci.yml, как указано в документации.

Это может показаться излишним, но если это регулярное выражение теперь является частью вашей истории репозитория, вы можете изменить его вместе с другими инструментами, используемыми для его вычисления.

Ответ 2

Сотрудник GitLab здесь.

Если у вашего администратора есть настроенные страницы GitLab, вы можете увидеть URL, на котором развернут ваш артефакт, перейдя (в вашем проекте) в SettingsPages.

Там вы должны увидеть:

Поздравляем! Ваши страницы обслуживаются по https://your-namespace.example.com/your-project : https://your-namespace.example.com/your-project

Нажмите на эту ссылку, и вы должны быть в порядке! Также мы расширяем поддержку артефактов HTML. Эта проблема и связанные с ней проблемы говорят о существующих и будущих функциях, которые могут расширить то, что вы создали здесь.

Ответ 3

Добавьте конфигурацию для цели 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>

А также в плагине maven-surefire-plugin добавьте следующее свойство при настройке

<argLine>surefireArgLine</argLine>

При выполнении вашей цели теста. Отчеты будут генерироваться. Сгенерированный jacoco-ut.exec можно просматривать только с помощью IDE.

Вот пример проекта https://github.com/r-sreesaran/http-patch-jax-rs

Для получения дополнительной информации см. Https://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin/

В файле .gitlab-ci.yml в разделе "артефакты" адаптируйте его в соответствии с конфигурацией пути в вашем pom.xml

artifacts:
   paths:
     - target/coverage-reports/

Ответ 4

В дополнение к тому, что @SKBo сказал, я хотел бы добавить небольшой твик.

имеющий

цель кошки/сайт/jacoco/index.html

будет загрязнять вас при создании выходных, что затруднит понимание того, что важно.

Я бы предложил это:

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

Это значительно уменьшит шум