2016-02-26 24 views
9

Abbiamo recentemente aggiornato il nostro server SonarQube alla versione più recente (5.3) e aggiornato tutti i plug-in. Il server monitora solo una singola build al momento, di un progetto C# creato da Visual Studio Team Services (era Visual Studio Online).SonarQube: impossibile creare misura per la riga X per file con file con <X lines

All'inizio, tutto ha funzionato bene (a parte un problema di lunga data che descriverò in un'altra domanda). Ma dopo un po 'abbiamo iniziato a ricevere gli errori come quello che segue quando si cerca di spingere i dati a SQ:

ERROR: Error during Sonar runner execution 
org.sonar.runner.impl.RunnerException: Unable to execute Sonar 
    at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91) 
    at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) 
    at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) 
    at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) 
    at org.sonar.runner.api.Runner.execute(Runner.java:100) 
    at org.sonar.runner.Main.executeTask(Main.java:70) 
    at org.sonar.runner.Main.execute(Main.java:59) 
    at org.sonar.runner.Main.main(Main.java:53) 
Caused by: java.lang.IllegalStateException: Can't create measure for line 47 for file '[PATH]/[FILENAME].cs' with 45 lines 
    at org.sonar.batch.sensor.coverage.CoverageExclusions.validateMaxLine(CoverageExclusions.java:158) 
    at org.sonar.batch.sensor.coverage.CoverageExclusions.validate(CoverageExclusions.java:129) 
    at org.sonar.batch.deprecated.DeprecatedSensorContext.saveMeasure(DeprecatedSensorContext.java:204) 
    at org.sonar.plugins.dotnet.tests.CoverageReportImportSensor.analyze(CoverageReportImportSensor.java:78) 
    at org.sonar.plugins.dotnet.tests.CoverageReportImportSensor.analyse(CoverageReportImportSensor.java:59) 
    at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:58) 
    at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:50) 
    at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:98) 
    at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:185) 
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:132) 
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:117) 
    at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:243) 
    at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:238) 
    at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:236) 
    at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:228) 
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:132) 
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:117) 
    at org.sonar.batch.task.ScanTask.execute(ScanTask.java:55) 
    at org.sonar.batch.task.TaskContainer.doAfterStart(TaskContainer.java:86) 
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:132) 
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:117) 
    at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:122) 
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:119) 
    at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:79) 
    at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) 
    ... 9 more 

Abbiamo trovato un post (https://groups.google.com/forum/#!topic/sonarqube/Xju6ichZe_k) che descrive una soluzione che coinvolge cambiare il codice di uno dei plugin (sonar- dotnet-tests-library) e sostituendo il file costruito sul server. Essendo .NET-head, non ci dispiacerebbe non dover modificare le librerie Java di altre persone per farlo funzionare;)

Questa è la soluzione al problema, o c'è qualcos'altro che potrebbe causare questo? Al momento ci impedisce di spingere i dati a SonarQube, il che è un peccato ...

risposta

1

Per me questo si è rivelato perché i rapporti di OpenCover di precedenti versioni venivano lasciati indietro su Jenkins.

Una volta assicurato che tutti erano stati rimossi, il problema è andato via, presumo che avere più rapporti significasse che cercava di elaborare i file più di una volta.

+2

Questo sembra accadere alle persone che usano anche la copertura del codice di Visual Studio Test. –

3

Sembra che ci sia un problema nel tooling Code Coverage fornito con Visual Studio 2015. Il problema dovrebbe essere risolto con Visual Studio 2015 Aggiornamento 3.

L'agente ospitato dovrebbe essere aggiornato con Update 3 subito dopo che viene rilasciato anche, il team di costruzione TFS è abbastanza veloce su quello. Per un elenco di software disponibili sull'agente ospitato, vedere here.

Soluzioni alternative fino ad allora:

  1. non generare un file di copertura del codice, ad esempio disabilitando l'opzione nella prova VS costruire compito
  2. alcuni utenti hanno segnalato il problema non si verifica con VS 2013, quindi potresti voler costruire e/o testarlo invece di usare VS 2015