Отчет о покрытии кода с использованием файла 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 задания успешно прошли.
Как я могу просмотреть отчеты о покрытиях?
Ответы
Ответ 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, на котором развернут ваш артефакт, перейдя (в вашем проекте) в Settings
→ Pages
.
Там вы должны увидеть:
Поздравляем! Ваши страницы обслуживаются по 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>'
Это значительно уменьшит шум