SonarQube: Невозможно создать меру для строки X для файла с файлом со строками <X
Недавно мы обновили наш сервер SonarQube до последней версии (5.3), а также обновили все плагины. На данный момент сервер отслеживает только одну сборку проекта C#, созданного Visual Studio Team Services (была Visual Studio Online).
Сначала все работало хорошо (кроме давней проблемы, которую я опишу в другом вопросе). Но через некоторое время мы начали получать ошибки, подобные приведенной ниже, при попытке отправить данные в 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
Мы нашли сообщение ( https://groups.google.com/forum/), в котором описывается решение, включающее изменение кода одного из плагинов (sonar-dotnet-tests-library) и замену встроенный файл на сервере. Будучи.NET-головами, мы не будем возражать против того, чтобы не вносить изменения в библиотеки Java других людей, чтобы заставить это работать;)
Это решение проблемы, или есть что-то еще, что может быть причиной этого? На данный момент это мешает нам отправлять данные в SonarQube, что является позором...
2 ответа
Кажется, есть проблема в инструменте Code Coverage, который поставляется с Visual Studio 2015. Эта проблема должна быть исправлена с помощью Visual Studio 2015 Update 3.
Размещенный агент должен быть обновлен до Обновления 3 вскоре после его выпуска, и команда сборки TFS довольно быстро справится с этой задачей. Список программного обеспечения, доступного на размещенном агенте, см. Здесь.
Обходные пути до тех пор:
- не генерируйте файл покрытия кода, например, отключив параметр в задаче построения VS Test
- некоторые пользователи сообщили, что проблема не возникает с VS 2013, поэтому вы можете захотеть собрать и / или протестировать ее вместо использования VS 2015
Для меня это оказалось потому, что отчеты OpenCover из предыдущих сборок остались на Jenkins.
Убедившись, что все они удалены, проблема исчезла, я предположил, что наличие нескольких отчетов означало, что он пытался обрабатывать файлы более одного раза.