Maven 使用gitlab-ci.yml文件的代码覆盖率报告
我需要在Gitlab中查看java maven项目的代码覆盖率报告。 根据和其他一些来源:Maven 使用gitlab-ci.yml文件的代码覆盖率报告,maven,gitlab,code-coverage,gitlab-ci,jacoco,Maven,Gitlab,Code Coverage,Gitlab Ci,Jacoco,我需要在Gitlab中查看java maven项目的代码覆盖率报告。 根据和其他一些来源: 我将jacoco添加到pom.xml中的插件列表中 将页面作业添加到我的.gitlab ci.yml文件中 将Total.*([0-9]{1,3})%添加到项目设置中的代码覆盖率分析中 但是没有任何报道,或者至少我看不到。没有覆盖率百分比或覆盖率报告页 .gitlab ci.yml文件的内容: image: maven:latest variables: MAVEN_CLI_OPTS: "
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
pom.xml
中的jacoco
插件:
<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>
org.jacoco
jacocomaven插件
0.7.5.201505241946
单元前测试
配制剂
单元后测试
测试
报告
我的项目是gitlab.com上的一个私人项目
管道及其所有4个作业均已成功通过
如何查看覆盖率报告?这里是GitLab员工
如果管理员设置了GitLab页面,则可以通过转到(在项目中)设置
->页面来查看工件部署到的URL
你应该看到:
祝贺你!您的页面在以下位置提供:https://your-namespace.example.com/your-project
点击那个链接,你就可以开始了!此外,我们正在扩展对HTML工件的支持。它的相关问题讨论现有的和即将推出的功能,这些功能可能会扩展到您在这里构建的功能 您似乎忘记了在.gitlab ci.yml
文件中添加对cat
的调用
你应该有这样的东西:
script:
- mvn $MAVEN_CLI_OPTS test
- cat target/site/jacoco/index.html
也就是说,我不认为这是最好的方法,因为您需要用原始HTML污染您的输出,以便检索所需的覆盖率值
我建议改用本请求中描述的方法:
- 将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 regexp:
\d+。\d+\%covered
编辑:
从Gitlab 8.17开始,您可以直接在.Gitlab ci.yml
文件中定义regexp,如中所述
这似乎是多余的,但是如果这个regexp现在是您的存储库历史记录的一部分,您可以将它与用于计算它的其他工具一起更改。除了@SKBo所说的之外,我还想添加一个小的调整
拥有
cat target/site/jacoco/index.html
将污染你的建设产出,使你难以阅读什么是重要的
我建议:
cat your/path/to/jacoco/report/index.html | grep-o.*.
这将极大地降低噪音我正在使用以下代码:
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})%/"
图片:maven:最新
要检查的声纳:
脚本:
-mvn验证sonar:sonar-Dsonar.host.url=$sonar\u host\u url-Dsonar.login=$sonar\u TOKEN-Dsonar.qualitygate.wait=true
-cat target/site/jacoco/index.html | grep-o'.*'
允许失败:false
覆盖范围:“/Total.*([0-9]{1,3})%/”
我在.gitlab ci.yml
cat target/site/jacoco-merge/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'
然后您可以使用gitlabs文档中提到的正则表达式:
Total.*?([0-9]{1,3})%
或者您可以使用:
Jacoco Coverage Total: ([0-9]{1,3})%
要显示基本总覆盖率百分比,您只需:
测试:
阶段:测试
图片:maven:3.6.3-jdk-11
-mvn$MAVEN_CLI_选项测试
-cat target/site/jacoco/index.html | grep-o'Total[^%]*%'
覆盖率:'/Total.*?([0-9]{1,3})%/'
人工产品:
路径:
-target/site/jacoco/jacoco.xml
到期日:1个月
规则:
-如果:“$CI_管道_源==”合并请求_事件“'
如果要启用代码覆盖率可视化功能:
可视化测试覆盖范围:
阶段:可视化测试覆盖率
图片:registry.gitlab.com/haynes/jacoco2cobertura:1.0.7
脚本:
-'python/opt/cover2cover.py target/site/jacoco/jacoco.xml src/main/java>target/site/cobertura.xml'
-'python/opt/source2filename.py target/site/cobertura.xml'
需要:[“测试”]
依赖项:
-试验
人工产品:
报告:
cobertura:target/site/cobertura.xml
规则:
-如果:“$CI_管道_源==”合并请求_事件“'
有关详细信息,请查看官方Gitlab文档,而不是尝试解析HTML输出,此短awk脚本从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 coverage regex谢谢。我找到了页面和覆盖率报告html文件的链接。但是这个文件只包含代码覆盖率的简单百分比。你知道我怎样才能看到代码的覆盖率吗?我的意思是将覆盖的代码视为绿线,将未覆盖的代码视为红线或类似的东西?现在的链接是jacoo/report/html/index.html
,因此,最后的命令是cat-your/path/to/jacoo/report/html/index.html | grep-o.*。
注意,也可以使用#/usr/bin/awk
shebang,但由于与不同发行版和版本的gawk存在一些兼容性问题,它的可移植性较差。
coverage.sh target/site/jacoco/jacoco.csv
369992 / 469172 instructions covered
78.86% covered