我需要在Gitlab中查看java maven项目的代码覆盖率报告。 根据{{3}},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个作业成功通过。
如何查看报道报告?
答案 0 :(得分:18)
您似乎忘记在cat
文件中添加.gitlab-ci.yml
的来电。
你应该有类似的东西:
script:
- mvn $MAVEN_CLI_OPTS test
- cat target/site/jacoco/index.html
话虽如此,我认为这不是最佳方式,因为您需要使用原始HTML污染输出,以便检索所需的覆盖值。
我建议使用此拉取请求中描述的方法:https://github.com/jacoco/jacoco/pull/488
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
文件中定义正则表达式,如documentation中所述。
这看起来似乎是多余的,但如果此正则表达式现在是您的存储库历史记录的一部分,您可以将其与用于计算它的其他工具一起更改。
答案 1 :(得分:10)
GitLab员工在这里。
如果您的管理员设置了GitLab页面,您可以通过(在您的项目上)到Settings
- &gt;来查看工件部署到的URL。 Pages
。
你应该看到:
<强>恭喜!您的网页在以下网址投放: https://your-namespace.example.com/your-project
点击该链接,你应该好好去!我们还扩展了对HTML工件的支持。 This issue及其相关问题讨论现有和即将推出的功能,这些功能可能会扩展您在此处构建的功能。
答案 2 :(得分:4)
我正在使用以下代码:
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})%/"
答案 3 :(得分:2)
我在 .gitlab-ci.yml
cat target/site/jacoco-merge/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'
这会打印一个没有混乱和 html 标签的漂亮字符串:
Jacoco Coverage Total: 39%
然后你可以使用 gitlabs 文档中提到的正则表达式:
Total.*?([0-9]{1,3})%
或者你可以使用:
Jacoco Coverage Total: ([0-9]{1,3})%
答案 4 :(得分:2)
为了显示基本的总覆盖率,您只需要:
test:
stage: test
image: maven:3.6.3-jdk-11
- mvn $MAVEN_CLI_OPTS test
- cat target/site/jacoco/index.html | grep -o 'Total[^%]*%'
coverage: '/Total.*?([0-9]{1,3})%/'
artifacts:
paths:
- target/site/jacoco/jacoco.xml
expire_in: 1 mos
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
如果您想启用代码覆盖率可视化功能:
visualize_test_coverage:
stage: visualize_test_coverage
image: registry.gitlab.com/haynes/jacoco2cobertura:1.0.7
script:
- 'python /opt/cover2cover.py target/site/jacoco/jacoco.xml src/main/java > target/site/cobertura.xml'
- 'python /opt/source2filename.py target/site/cobertura.xml'
needs: [ "test" ]
dependencies:
- test
artifacts:
reports:
cobertura: target/site/cobertura.xml
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
有关详细信息,请查看官方 Gitlab 文档 here
答案 5 :(得分:1)
添加目标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
在“artifacts”部分下的.gitlab-ci.yml文件中根据pom.xml中的路径配置对其进行修改
artifacts:
paths:
- target/coverage-reports/
答案 6 :(得分:1)
除了@SKBo所说的之外,我还想做一点调整。
拥有
cat target / site / jacoco / index.html
将污染您生成的输出,导致难以阅读重要内容。
我建议它:
cat your/path/to/jacoco/report/index.html | grep -o '<tfoot>.*</tfoot>'
那将大大减少噪音
答案 7 :(得分:1)
这个简短的 awk 脚本不是尝试解析 HTML 输出,而是从 jococo.csv 文件中提取百分比。
#!/bin/sh
# This awk script calculates a code coverage %
# usage: pass the the jacoco.csv file as first argument
awk -F "," '
{
instructions += $4 + $5; covered += $5
}
END {
print covered, "/", instructions, "instructions covered";
printf "%.2f%% covered\n", covered / instructions * 100
}' "$1"
打印:
coverage.sh target/site/jacoco/jacoco.csv
369992 / 469172 instructions covered
78.86% covered
您应该调整 printf 格式以匹配您的 Gitlab 覆盖率正则表达式