#.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)