Sonar runner отлично работает для .NET-проектов в командной строке, но сообщает об отсутствии PDF-файлов в Jenkins

#.net #jenkins #sonarqube #opencover

#.net #Дженкинс #sonarqube #opencover

Вопрос:

Я использую Sonar с OpenCover для сбора информации о покрытии кода моих проектов на C #, используя Jenkins в качестве системы CI. Сервер Sobar версии 4.3, а runner имеет версию 2.3 на тестовой машине.

Сложная часть: когда я запускаю sonar runner из командной строки тестовой машины (Server 2008R2), он отлично работает с OpenCover и собирает данные о покрытии после завершения тестов. Например:

     14:31:36.479 INFO  - Committing...
    14:31:36.708 INFO  - Visited Classes 53 of 114 (46.49)
    14:31:36.710 INFO  - Visited Methods 193 of 427 (45.2)
    14:31:36.710 INFO  - Visited Points 1804 of 4024 (44.83)
    14:31:36.711 INFO  - Visited Branches 862 of 2012 (42.84)
    14:31:36.712 INFO  -
  

НО если я настрою его на выполнение тех же самых команд из задания Jenkins, он по-прежнему выполняет тесты должным образом, но не может собрать информацию о покрытии и жалуется на отсутствие PDF-файлов или неправильную конфигурацию профилировщика:

     15:33:00.595 INFO  - Committing...
    15:33:00.879 INFO  - No results, this could be for a number of reasons. The most common reasons are:
    15:33:00.879 INFO  -     1) missing PDBs for the assemblies that match the filter         please review the
    15:33:00.879 INFO  -     output file and refer to the Usage guide (Usage.rtf) about filters.
    15:33:00.879 INFO  -     2) the profiler may not be registered correctly, please refer to the Usage
    15:33:00.879 INFO  -     guide and the -register switch.
  

Тогда отчеты о покрытии кода на панели мониторинга Sonar составляют 0%.

Некоторые из вас, ребята, возможно, уже сталкивались с этим — может ли это быть связано с какой-то проблемой конфигурации? Я проверил сайт SonarQube, и такой информации нет; просматривайте веб-страницы, и все же очень немногие говорили об этом и думали, что это может быть ошибка в Sonar.

Моя первоначальная мысль заключалась в том, что когда я выполняю команды, например «SET JAVA_HOME=C: Program Files Java jre7 amp; C:sonar_runnersonar-runner-2.3binsonar-runner.bat «, и он находится под моей учетной записью; и запускает те же команды через Jenkins, и он находится под учетной записью локальной системы, потому что он выполняется службой Windows Jenkins. Но проверка настроек среды из выходных данных Sonar-runner и, похоже, оба довольно близки.

Есть какие-либо подсказки о причине отсутствия отчетов о данных покрытия? Большое спасибо 🙂

Комментарии:

1. Проблема частично решается путем изменения файла sonar-project.properties: используйте «sonar.gallio.runner=Local» вместо «sonar.gallio.runner=IsolatedProcess», чтобы при фиксации была получена правильная информация. НО возникает другая проблема — тест не выполнен, поэтому покрытие по-прежнему равно 0%. Больше подсказок по этому поводу? Спасибо.

Ответ №1:

Это может быть проблема с регистрацией, если библиотеки DLL профилировщика.

Вы можете вручную зарегистрировать их с помощью regsvr32, а затем переключить выпадающий регистр. Серверы сборки иногда запускаются как службы, и это стало решением проблемы.

В качестве альтернативы, возможно, тестируемые сборки копируются в другое место (изоляция?) но для исправления этого можно использовать параметр -targetdir, который не является PDB.

Более подробную информацию об OpenCover можно найти в wiki https://github.com/OpenCover/opencover/wiki/Usage или в прилагаемых документах, когда он был установлен нами (nuget / msi / zip)

Комментарии:

1. Спасибо, Шон 🙂 Не могли бы вы помочь и подробнее рассказать о том, как настроить OpenCover из Sonar? Кажется, все это встроено в байтовый код. Кроме того, я запускаю «Gallio. Utility.exe Проверьте установку» и получите эту информацию: Утилита Gallio — версия 3.4 build 12 … Плагин ‘Gallio.VisualStudio.Tip90’ отключен: плагин зависит от другого отключенного плагина: ‘Gallio.VisualStudio. Shell90′.’ Может ли это быть связано?

2. Извините, я понятия не имею, я часто использую OpenCover (но никогда не использовал Sonar) — у ребят хороший форум, и они с готовностью отвечают на вопросы людей, задающих вопросы (они могут не отслеживать StackOverflow)