«Покрытие проекта установлено на 0%» - JaCoCo и Sonar в Дженкинс с Ant - PullRequest
7 голосов
/ 14 января 2012

Я переместил свою работу с одного компьютера Hudson в среду с несколькими подчиненными устройствами Jenkins, и теперь покрытие JaCoCo больше не работает.

РАБОТА (старая версия): Hudson 2.0.1, Jenkins Sonar Plugin 1.7.1, Sonar 2.1.2

BROKEN (новый): Jenkins 1.446, Jenkins Sonar Plugin 1.7.2, Sonar 2.1.2

Мое задание Hudson называется Pinnacle и используется для запуска на одномСервер Hudson с сонаром на одной машине.Я настроил свою сборку (NO MAVEN), выполнив следующие действия.

1) Добавил цель Ant в мой build.xml с именем test-with-coverage

2) Сконфигурировал задание Pinnacle в Гудзоне для«вызвать автономный анализ сонара» со следующими свойствами:

sonar.projectKey=com.skyboximaging:pinnacle
sonar.projectName="Pinnacle"
sonar.projectVersion=1.0
sources=Pinnacle/src/java
tests=Pinnacle/test/java
binaries=Pinnacle/classes
sonar.jacoco.reportPath=Pinnacle/jacoco.exec
sonar.jacoco.antTargets=test-with-coverage

(обратите внимание, что код извлекается в каталог Pinnacle в рабочей области задания Jenkins.)

3) Общие настройки «Сонар»"использовать JaCoCo для покрытия кода

Все работало прекрасно!

Но в новой среде Jenkins я вижу эту ошибку в выводе сборки Jenkins:

23:15:17.863 INFO  Sensor JaCoCoSensor...
23:15:17.868 INFO  Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/workspace/Pinnacle/Pinnacle/jacoco.exec

ЭтоФайл не существует на ведомом устройстве, где выполнялась сборка.(Каталог / var / lib / jenkins / workspace / Pinnacle / Pinnacle действительно существует.)

Все остальные датчики (FindBugs, PMD и т. Д.) Работают нормально.Просто JaCoCo не работает.

Работает ли Sonar / JaCoCo даже в среде нескольких подчиненных Jenkins?

Я подозреваю, что задача Ant test-with-coverage не запускается.Как Sonar находит build.xml?А чем отличаются старые и новые установки?

1 Ответ

9 голосов
/ 28 февраля 2012

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

sonar.core.codeCoveragePlugin=jacoco
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=tests/test-reports

Вы должны установить sonar.core.codeCoveragePlugin = jacoco, если хотите иметь возможность использовать свойство sonar.jacoco.reportPath. В противном случае вам придется использовать свойство sonar.jacoco.itReportPath. Тем не менее, я рекомендую просто установить свойства codeCoveragePlugin и reportPath. В противном случае он не будет отображаться в виджете покрытия по умолчанию в сонаре. Обратите внимание: вы не можете использовать инструмент покрытия по умолчанию и jacoco вместе. Это должен быть один или другой. Я решил использовать Jacoco.

Ваша цель ant должна быть настроена для генерации результатов jacoco.exec перед запуском задач сонара:

<jacoco:coverage enabled="${tests.code.coverage}" destfile="${jacoco.exec.dest}">
  <junit fork="yes" printsummary="withOutAndErr" dir="${tests.working.dir}">
  ...

Обязательно сообщите эхолоту повторно использовать отчеты и любые отчеты о солнечном огне, если вы запускаете junit перед сонаром, то есть если вы используете junit вне сонара:

sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
sonar.surefire.reportsPath=tests/test-reports

По какой-либо причине, если вам нужна дополнительная многословная отладка, используйте следующее свойство:

sonar.verbose = истина

...