SonarQube和Lcov报告无法解析文件路径

时间:2018-08-16 13:57:41

标签: javascript sonarqube istanbul karma-coverage sonarjs

我们正在尝试为我们的角度应用程序编写SonarQube代码覆盖率报告。我们已使用Karma生成代码覆盖率报告,并将其导入SonarQube分析器。

SonarQube已经为我们的项目提供了C#覆盖,现在我们也想添加JavaScript代码覆盖。

Teamcity打电话给Karma,它会创建代码覆盖范围,并将lcov文件和报告文件放入src\Planning.Spa\Coverage\report文件夹中。

LCOV文件

TN:
SF:E:/a03/work/bb52cb33e083fc9/src/Planning.Spa/Offer/app/app.component.js
FN:5,(anonymous_1)
FN:6,AppComponent
FN:8,(anonymous_3)
FN:9,(anonymous_4)

Teamcity具有配置为生成C#代码覆盖率和JavaScript覆盖率的以下MSBuild参数。

SonarQube MSBuild配置

$sonar=%system.MSBUILD_SONARQUBE_RUNNER%\MSBuild.SonarQube.Runner.exe 
begin /k:"com.test:Test" /n:"MyProject" /v:"%build.number%" 
/d:sonar.cs.dotcover.reportsPaths="$coverageReport" 
/d:sonar.cs.nunit.reportsPaths="$testResults" 
/d:sonar.javascript.lcov.reportPaths="coverage\report\lcov.info"

运行SonarQube分析时,出现以下错误

[14:35:56][Step 13/13] 14:35:56.243 WARN: Could not resolve 114 file paths in
 [E:\a03\work\bb52cb33e083fc9\src\Planning.Spa\coverage\report\lcov.info], 
first unresolved path: E:/a03/work/bb52cb33e083fc9/src/Planning.Spa/Offer/app/app.component.js

我们找不到使用MSBuild运行器同时运行C#和JavaScript的任何示例。也找不到与此Could not resolve file paths

相关的任何答案

我们正在努力使其在过去的2周内正常工作,但找不到任何有用的示例或答案。 herehere

未回答类似的问题

更新具有更多信息的声纳分析

[14:35:43][Step 13/13] 14:35:43.751 INFO: Base dir: E:\a03\work\bb52cb33e083fc9\src\Planning.Spa
[14:35:43][Step 13/13] 14:35:43.751 INFO: Working dir: E:\a03\work\bb52cb33e083fc9\.sonarqube\out\.sonar\com.Planning_com.Planning_6CC487F0-8283-4351-9B65-F1698B1B804E
[14:35:43][Step 13/13] 14:35:43.755 INFO: Source paths: Offer/App/app.component.js, Offer/App/app.component.js.map, Offer/App/Common/order-by.pipe.js
[14:35:43][Step 13/13] 14:35:43.755 INFO: Source encoding: UTF-8, default locale: en_US
[14:35:43][Step 13/13] 14:35:43.755 INFO: Index files
[14:35:43][Step 13/13] 14:35:43.756 INFO: Excluded sources: 
[14:35:43][Step 13/13] 14:35:43.756 INFO:   Offer/Scripts/**
[14:35:43][Step 13/13] 14:35:43.756 INFO:   Offer/libs/**
[14:35:43][Step 13/13] 14:35:43.757 INFO: Analyzer working directory contains 5 .pb file(s)

[14:35:43][Step 13/13] 14:35:43.898 DEBUG: 'Offer/App/app.component.js' indexed with language 'js'
[14:35:43][Step 13/13] 14:35:43.898 DEBUG: 'Offer/App/app.component.js.map' indexed with language 'null'
[14:35:43][Step 13/13] 14:35:43.953 INFO: 1010 files indexed
[14:35:43][Step 13/13] 14:35:43.953 INFO: 111 files ignored because of inclusion/exclusion patterns
[14:35:43][Step 13/13] 14:35:43.953 INFO: Quality profile for cs: Sonar C# Planning SIM
[14:35:43][Step 13/13] 14:35:43.953 INFO: Quality profile for js: Sonar way


[14:35:43][Step 13/13] 14:35:43.979 DEBUG: 'JavaSquidSensor' skipped because there is no related file in current project
[14:35:43][Step 13/13] 14:35:43.980 DEBUG: Sensors : CSS Analyzer Sensor -> Embedded CSS Analyzer Sensor -> JavaScript Squid Sensor -> C# -> SonarJavaXmlFileSensor -> Web -> XML Sensor
[14:35:43][Step 13/13] 14:35:43.980 INFO: Sensor CSS Analyzer Sensor [css]

[14:35:51][Step 13/13] 14:35:51.314 INFO: Sensor JavaScript Squid Sensor [javascript]
[14:35:51][Step 13/13] 14:35:51.316 INFO: 57/57 source files have been analyzed
[14:35:51][Step 13/13] 14:35:51.344 INFO: 153 source files to be analyzed

[14:35:55][Step 13/13] 14:35:55.145 DEBUG: 'Offer/App/app.component.js' generated metadata  with charset 'UTF-8'

[14:35:56][Step 13/13] 14:35:56.243 WARN: Could not resolve 114 file paths in [E:\a03\work\bb52cb33e083fc9\src\Planning.Spa\coverage\report\lcov.info], first unresolved path: E:/a03/work/bb52cb33e083fc9/src/Planning.Spa/Offer/app/app.component.js
[14:35:56][Step 13/13] 14:35:56.237 INFO: Test Coverage Sensor is started
[14:35:56][Step 13/13] 14:35:56.239 INFO: Analysing [E:\a03\work\bb52cb33e083fc9\src\Planning.Spa\coverage\report\lcov.info]
[14:35:56][Step 13/13] 14:35:56.243 INFO: Sensor JavaScript Squid Sensor [javascript] (done) | time=4929ms
[14:35:56][Step 13/13] 14:35:56.243 INFO: Sensor C# [csharp]

更新 SonarJS实际的Java代码

https://github.com/SonarSource/SonarJS/blob/3.2.0.5506/sonar-javascript-plugin/src/main/java/org/sonar/plugins/javascript/lcov/LCOVParser.java#L146

sonarqube会以某种方式忽略其文件系统中的绝对路径,并将inputFile设置为null

InputFile inputFile = context.fileSystem().inputFile(context.fileSystem().predicates().hasPath(filePath));

我尝试使用Gulp将绝对值修改为相对值,并用\更改了/。但是什么都行不通。

  

SonarQube版本 6.5.0.27846

     

SonarJs版本 3.2.0.5506

1 个答案:

答案 0 :(得分:2)

我的用例有点类似,但是使用了不同的技术堆栈:Java + React + Gradle。这是我需要做的声纳才能显示声纳5.6 + SonarJS 3.x上我的javascript模块的覆盖率信息:

阅读您的研究和摘要,我认为您所引用的伊斯坦布尔问题并不适用,因为{}文件包含绝对路径。 我的猜测是您必须提供:lcovsonar.sources属性。

为了完整起见,我在下面发布了我的gradle配置的完整代码段,并将提供其下面每个属性的说明:

sonar.tests

sonarqube { properties { property "sonar.javascript.file.suffixes", ".js,.jsx" property "sonar.sourceEncoding", "UTF-8" property 'sonar.sources', 'public, src' property 'sonar.tests', 'src' property 'sonar.coverage.exclusions', '**/__tests__/**' property 'sonar.test.inclusions', '**/__tests__/**' property 'sonar.javascript.lcov.reportPath', 'coverage/lcov.info' property 'sonar.genericcoverage.unitTestReportPaths', 'testResults/sonar-report.xml' } } :AFAIR我必须提供它来安抚gradle sonarqube插件,因为我在sonarqube服务器中看到的默认设置是相同的。

sonar.javascript.file.suffixes:在处理文件时也会引起错误,但是我认为这是由于我的本地设置所致。

sonar.sourceEncodingsonar.sources:我记得我必须提供这些信息,因为声纳无法找到我要处理的任何信号源。我清楚地记得这一点,因为我不必为Java源代码提供任何此类信息。

sonar.tests:需要获得正确的覆盖率信息。

sonar.coverage.exclusions:sonarjs插件需要它来标识我的测试文件。

sonar.test.inclusions:我还想在仪表板上查看单元测试的贡献,因此我不得不将笑话报告处理为通用的声纳格式。