web-dev-qa-db-ja.com

SonarQubeとLcovレポートはファイルパスを解決できませんでした

angularアプリケーションの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週間それを機能させようとしていますが、有用な例や答えを見つけることができませんでした。同様の質問には答えられませんでした ここ および ここ

更新詳細情報を含むソナー分析

[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

5

私のユースケースは似たようなものでしたが、技術スタックが異なります:Java + React +Gradle。sonarqube5.6でjavascriptモジュールのカバレッジ情報を表示するためにsonarを取得するために必要なことは次のとおりです。 + SonarJS 3.x:

調査とスニペットを読むと、lcovファイルに絶対パスが含まれているため、参照しているイスタンブールの問題は当てはまらないと思います。私の推測では、あなたは提供しなければならないでしょう:sonar.sourcesおよびsonar.testsプロパティ。

完全を期すために、以下に私のgradle構成のスニペット全体を投稿し、その下の各プロパティについて説明します。

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'
    }
}

sonar.javascript.file.suffixes:AFAIR sonarqubeサーバーに表示されるデフォルトは同じであるため、gradlesonarqubeプラグインをなだめるために提供する必要がありました。

sonar.sourceEncoding:ファイルの処理でもエラーが発生していましたが、ローカル設定が原因だと思います。

sonar.sourcesおよびsonar.tests:ソナーはそれらなしで処理するソースを見つけることができなかったので、これらを提供しなければならなかったことを覚えています。 Javaソースにそのような情報を提供する必要がなかったので、これをはっきりと覚えています。

sonar.coverage.exclusions:正しいカバレッジ情報を取得するために必要でした。

sonar.test.inclusions:sonarjsプラグインがテストファイルを識別するために必要でした。

sonar.genericcoverage.unitTestReportPaths:ダッシュボードでユニットテストの貢献も確認したかったので、jestレポートを一般的なソナー形式に処理する必要がありました。

3
dubes