web-dev-qa-db-fra.com

Rapport SonarQube et Lcov Impossible de résoudre les chemins de fichiers

Nous essayons de créer un rapport de couverture de code SonarQube pour notre application angulaire. Nous avons utilisé Karma pour générer un rapport de couverture de code et l'importer dans l'analyseur SonarQube. 

Le SonarQube a déjà une couverture C # pour notre projet, nous souhaitons maintenant ajouter une couverture de code JavaScript.

Teamcity appelle, Karma et il crée une couverture de code et place le fichier lcov et les fichiers de rapport dans le dossier src\Planning.Spa\Coverage\report.

Fichier 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 a les paramètres MSBuild suivants configurés pour générer une couverture de code C # et une couverture JavaScript.

Configuration 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"

Lors de l'exécution de l'analyse SonarQube, nous obtenons l'erreur suivante

[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

Nous ne trouvons aucun exemple d'utilisation de C # et JavaScript à l'aide de MSBuild Runner. Impossible également de trouver une réponse relative à ce Could not resolve file paths

Nous essayons de faire en sorte que cela fonctionne pendant les 2 dernières semaines et n'avons trouvé aucun exemple ni réponse utiles. Des questions similaires sont restées sans réponse ici et ici

Mise à jour Analyse du sonar avec plus d'informations

[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]

Mise à jour Code Java actuel de SonarJS 

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 ignore mon chemin absolu de son système de fichiers et définit inputFile comme null.

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

J'ai essayé avec Gulp de modifier absolute en relatif et de modifier \ avec /. Mais rien ne fonctionne. 

Version SonarQube 6.5.0.27846  

Version SonarJs 3.2.0.5506

5
Murali Murugesan

Mon cas d'utilisation était un peu similaire, mais pour une pile technologique différente: Java + React + Gradle. Voici ce que je devais faire pour que sonar affiche les informations de couverture de mon module javascript sur sonarqube 5.6 + SonarJS 3.x: 

En lisant vos recherches et vos extraits, je pense que le problème d'istanbul que vous référencez ne s'applique pas, car le fichier lcov contient le chemin absolu. Je suppose que vous devez fournir les propriétés: sonar.sources et sonar.tests.

Par souci d'exhaustivité, je publie l'extrait complet de la configuration de mon gradin ci-dessous et fournirai des explications pour chaque propriété située en dessous: 

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 Je devais le fournir pour apaiser le plugin Gradle Sonarqube, car les paramètres par défaut que je vois dans le serveur Sonarqube sont les mêmes.

sonar.sourceEncoding: cela causait également des erreurs dans le traitement des fichiers, mais je pense que c'était à cause de mes paramètres locaux. 

sonar.sources et sonar.tests: Je me souviens que je devais les fournir, car le sonar n’a pu trouver aucune de mes sources à traiter sans elles. Je m'en souviens distinctement car je n'ai jamais eu à fournir de telles informations pour mes sources Java. 

sonar.coverage.exclusions: était nécessaire pour obtenir les informations de couverture correctes. 

sonar.test.inclusions: était requis pour que le plugin sonarjs identifie mes fichiers de test. 

sonar.genericcoverage.unitTestReportPaths: Je souhaitais également voir la contribution des tests unitaires dans mon tableau de bord. Je devais donc traiter mes rapports de plaisanterie dans un format sonar générique. 

2
dubes