本地SonarScanner无法读取React项目lcov.info覆盖率文件该如何处理
你看到的JaCoCo相关日志是正常现象,Sonar会加载所有已安装插件的覆盖率导入传感器,即使是非Java项目,只要安装了JaCoCo插件就会触发该扫描逻辑,找不到Java覆盖率文件会自动跳过,完全不影响JS/TS项目的覆盖率导入,不需要针对JaCoCo做任何配置。
按以下步骤排查即可解决lcov文件读取问题:
- 修正覆盖率路径配置
不要使用**/通配符匹配lcov文件,容易命中无效路径导致识别失败,通常npm test --coverage生成的lcov文件存放在项目根目录的coverage文件夹下,修改配置为:
sonar.javascript.lcov.reportPaths=coverage/lcov.info
注意:SonarQube 7.8及以上版本已合并JS/TS覆盖率配置,sonar.typescript.lcov.reportPaths参数已废弃,无需单独配置。
- 修正测试文件匹配规则
你当前配置的sonar.test.inclusions=**/__tests__/*仅能匹配__tests__目录下的一级文件,若存在多级嵌套的测试文件,会导致Sonar无法关联测试文件与源文件,直接忽略覆盖率报告,修改为:
sonar.test.inclusions=**/__tests__/**/*
- 校验lcov文件路径匹配度
打开生成的lcov.info文件,查看所有SF:开头的行记录的源文件路径,若路径和你运行SonarScanner的工作目录下的源文件路径不匹配,可添加如下配置修正路径前缀:
# 示例:如果lcov里的路径为/Users/xxx/project/src/xxx.ts,运行扫描的工作目录为/Users/xxx/project,可配置basePath为/ sonar.javascript.lcov.basePath=<你的路径前缀>
- 确认SonarJS插件已安装
进入SonarQube控制台->管理->市场,搜索SonarJS确认插件已安装,且版本和当前SonarQube版本兼容,未安装该插件的情况下Sonar不会处理JS/TS的覆盖率报告。 - 开启调试日志定位问题
如果以上步骤都未解决问题,运行SonarScanner时添加-X参数开启调试日志,搜索lcov关键字即可定位具体失败原因,常见原因包括文件权限不足、路径拼写错误、lcov文件内容为空等。
内容的提问来源于stack exchange,提问作者Gen Tan
相关产品推荐
相关产品推荐

