Sonarqube 默认覆盖范围为 0,来自具有绝对路径的 Karma Coverage LCOV 文件

Posted

技术标签:

【中文标题】Sonarqube 默认覆盖范围为 0,来自具有绝对路径的 Karma Coverage LCOV 文件【英文标题】:Sonarqube default coverage to 0 from Karma Coverage LCOV file with absolute pathjs 【发布时间】:2017-04-13 03:11:41 【问题描述】:

当我的 lcov 文件中的路径是绝对路径时,Sonar 不会检索我的项目的覆盖信息。对于文件:

TN:
SF:/mnt/vg01-data01/jenkins/<jenkins.myhost.com>/jenkins_home/workspace/<job1>/src/app.js
FN:,(anonymous_0)
FN:,(anonymous_1)
FNF:2
FNH:2
FNDA:1,(anonymous_0)
FNDA:2,(anonymous_1)
DA:3,1
DA:4,1
DA:6,1
DA:7,1
DA:8,1
DA:9,1
DA:11,1
DA:18,1
DA:19,1
DA:22,2
DA:27,1
LF:11
LH:11
BRF:0
BRH:0
end_of_record
....

我收到以下警告:

...
05:06:27.565 INFO: Analysing [/srv/jenkins/<jenkins.myhost.com>/jenkins_home/workspace/<job1>/coverage/lcov.info]
05:06:27.574 DEBUG: Default value of zero will be saved for file: src/app.js
05:06:27.574 DEBUG: Because was not present in LCOV report.
05:06:27.578 DEBUG: Default value of zero will be saved for file: src/app.spec.js
05:06:27.578 DEBUG: Because was not present in LCOV report.
05:06:27.579 DEBUG: Default value of zero will be saved for file: src/js/form/form.ctrl.js
05:06:27.579 DEBUG: Because was not present in LCOV report.
05:06:27.580 DEBUG: Default value of zero will be saved for file: src/js/form/form.module.js
05:06:27.580 DEBUG: Because was not present in LCOV report.
05:06:27.581 DEBUG: Default value of zero will be saved for file: src/js/success/success.ctrl.js

...

但是,默认情况下,业力(和 istambul)正在生成具有绝对路径的文件。

如果我更改路径以使其相对,sonarqube 会正确报告覆盖范围。但是,我必须确保在向声纳报告之前始终运行“lcov 补丁”脚本。

声纳是否支持绝对路径?其他团队正在为这个问题做些什么?这些是我正在使用的版本:

karma@1.3.0 & karma-coverage@1.1.1 声纳 6.1 和 javascript 插件 2.14

更新:我用作业中的确切文件和日志替换了我看到的文件和日志(出于安全原因,我仍然必须更改主机和作业的名称。)

2016 年 3 月更新:我已经向 Istambul 发送了一个拉取请求,以便能够生成具有相对路径的 lcov 文件。我希望这能解决这个问题https://github.com/gotwarlost/istanbul/pull/771

【问题讨论】:

【参考方案1】:

SonarQube JavaScript 插件应该能够处理 LCOV 文件中的相对路径和绝对路径。但是,您的设置似乎不正确。您的 LCOV 文件是指给定目录中的文件路径:

SF:/home/mrincon/work/git/promoter-app-client/src/app.js

根据您的分析日志,您的分析似乎是在另一个目录中运行的:

Analysing [/srv/jenkins/master/jenkins_home/workspace/job1/coverage/lcov.info]

也许您在一台机器上生成了 LCOV 文件,然后在另一台机器上运行分析......最后,SonarQube 无法将 LCOV 文件中包含的路径与被分析的文件匹配。

您应该:

生成 LCOV 报告并从中运行 SonarQube 分析 目录, 或让您的 LCOV 文件仅包含相对路径。

【讨论】:

嗨皮埃尔,我已经更新了我的工作、工作区和日志中的实际文件(我仍然必须隐藏主机和工作名称)。由于路径不匹配,您明确指出我正确的方向! 皮埃尔,你如何让你的 LCOV 文件只输出相对路径?似乎这在github.com/gotwarlost/istanbul/issues/104 之前出现过,但从未关闭。我为此发送了一个 PR,尽管 github.com/gotwarlost/istanbul/pull/771

以上是关于Sonarqube 默认覆盖范围为 0,来自具有绝对路径的 Karma Coverage LCOV 文件的主要内容,如果未能解决你的问题,请参考以下文章

具有 android 测试和测试覆盖率的 sonarqube

SonarQube 覆盖范围未显示

如何配置 SonarQube 让我们增加覆盖范围?

SonarQube 覆盖多模块项目

SonarQube:从未计算过新代码的覆盖率

SonarQube 是不是总是需要外部代码覆盖工具来显示声纳服务器上的覆盖范围?