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コード
どういうわけかsonarqubeはファイルシステムからの絶対パスを無視し、inputFileをnullに設定します
InputFile inputFile = context.fileSystem().inputFile(context.fileSystem().predicates().hasPath(filePath));
Gulpを使用して絶対値を相対値に変更しようとし、\
を/
に変更しました。しかし、何も機能しません。
SonarQubeバージョン6.5.0.27846
SonarJsバージョン3.2.0.5506
私のユースケースは似たようなものでしたが、技術スタックが異なります: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レポートを一般的なソナー形式に処理する必要がありました。