使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率相关的知识,希望对你有一定的参考价值。

我正在尝试使用Sonar和Jenkins获得代码覆盖率。我看到Jenkins的Sonar插件成功执行JUnit测试用例并成功完成构建。但是Sonar没有在项目中显示代码覆盖率结果(总是显示0.0%作为代码覆盖率)。但声纳确实显示出“单元测试成功”。

我正在和詹金斯和声纳一起使用Maven。

我在执行Sonar插件时在Jenkins日志中收到以下消息:

Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec

任何人都可以帮助我如何在任何Sonar项目上获得正确的代码覆盖率。

答案

仅仅因为Sonar正确地调用了Surefire(并且您收到了“单元测试成功”消息)并不意味着JaCoCo检测了您的代码。

尝试直接执行JaCoCo。您可能会发现JaCoCo直接失败的原因:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo将把jacoco.exec及其XML / html报告放在target / jacoco中。或者它会失败,希望你能更好地了解原因。

一个非常常见的问题是,如果您根本没有更改Surefire argLine,JaCoCo javaagent将无法运行,因为jacoco:prepare-agent只是设置了argLine属性,在这种情况下,它被方便地忽略。您可以将prepare-agent的propertyName属性设置为其他内容(例如jacocoArgLine)并将其包含在您的argLine配置中:

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>

另一答案

我读了https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project并使用cobertura作为我的代码覆盖插件然后我看到小项目的代码覆盖显示。当我在声纳中检查一个大项目时,我只看到代码覆盖率 - 这意味着它是空的。在日志中,我发现在/.../coverage.xml路径中找不到Cobertura报告。

由于OutOfMemeryError:heapspace,未生成coverage.xml。由于我的项目是如此大的项目,当我将堆内存设置为2GB并且cobertura插件内存为1.5GB声纳时,会显示代码覆盖率。

另一答案

您的Sonar插件无法找到Jacoco生成的报告文件。

在你的pom(父母或孩子)中寻找<destFile>执行下的jacoco/prepare-agent标签。将名称和位置更改为target/jacoco.exec,你很高兴!

另一答案

而不是使用Jenkins声纳插件来运行声纳,尝试通过执行声纳目标与maven一起使用。通常这比设置额外的构建步骤和调整所有路径更容易,直到声纳找到所有相关文件。

在你的情况下,我猜它可以读取junit / testng报告,但找不到jacoco结果(jacoco.exec)。路径声纳输出(../sonar/target/jacoco.exec)是否正确?

另一答案

根据这个blog post,您可能忘记在项目属性中设置sonar.binaries属性

不要忘记sonar.binaries,否则,您可能会得到类似«项目覆盖率设置为0%,因为没有类的目录。 »在您的日志中。

[...]
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
[...]

以上是关于使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 集成Sonar代码质量扫描

持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知

Sonar与jenkins集成,Java代码走查

我需要一些插件,它可以在成功完成竹子作业后触发 jenkins 构建

[ci]项目规划-后续

jenkins jira 集成有啥用