Sonar не показывает покрытие кода после успешной сборки с помощью плагина Jenkins Sonar

Я пытаюсь получить покрытие кода с помощью сонара и Дженкинса. Я вижу, что плагин Sonar Дженкинса успешно выполняет тестовые случаи JUnit и успешно завершает сборку. Но Sonar не показывает результаты покрытия кода (всегда показывает 0.0% в качестве покрытия кода) в проекте. Но Сонар показывает "успех модульного теста".

Я использую Maven с Дженкинсом и сонаром.

Я получаю следующее сообщение в журналах Дженкинса при выполнении плагина Sonar:

Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec

может любой один поможет мне, как получить правильное покрытие кода на любом проекте Sonar.

5 ответов


только потому, что Сонар правильно вызвал Surefire (и вы получили сообщение "успех модульного теста"), не означает, что JaCoCo инструментировал ваш код.

попробуйте выполнить JaCoCo напрямую. Вы можете узнать, почему JaCoCo терпит неудачу напрямую:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo разместит jacoco.exec а также его XML / HTML отчеты в target/jacoco. Или он потерпит неудачу, и, надеюсь, у вас будет лучшая идея относительно почему?.

одна очень распространенная проблема заключается в том, что JaCoCo javaagent не будет работать, если вы изменили Surefire argLine вообще, потому что jacoco:prepare-agent задает argLine свойство, которое в этом случае удобно игнорировать. Вы можете установить prepare-agent propertyName свойство к чему-то еще (например,jacocoArgLine) и это в конфигурации argLine:

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>


я читаю https://docs.sonarqube.org/display/PLUG/Code + покрытие+по + Блок + тесты+для + Java + проект и использовал cobertura в качестве плагина покрытия кода, затем я вижу отображение покрытия кода для небольших проектов. Когда я проверяю большой проект в sonar, я просто вижу покрытие кода как-это означает, что оно пустое. В журналах я мог найти, что отчет Cobertura не был найден в /.../охват.путь xml.

покрытия.xml не был создан из-за OutOfMemeryError:heapspace. Поскольку мой проект такой большой проект, когда я устанавливаю память кучи на 2GB, а память плагина cobertura на 1.5 GB sonar получает покрытие кода.


вместо того, чтобы использовать плагин Jenkins sonar для запуска сонара, попробуйте сделать это с maven, выполнив цель сонара. Обычно это проще, чем настроить дополнительный шаг сборки и настроить все пути, пока sonar не найдет все соответствующие файлы.

в вашем случае, я думаю, он может прочитать отчет junit / testng, но не может найти результаты jacoco (jacoco.выполнение.) Является ли путь выходов сонара(../sonar/target/jacoco.exec) правильно?


по этому блоге, вы, вероятно, забыли установить sonar.binaries свойства в свойствах проекта

Не забудьте сонар.двоичные файлы, в противном случае, вы можете получить что-то вроде " покрытие проекта установлено в 0%, так как нет каталогов с классами. - в ваших журналах.

[...]
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
[...]

подключаемый модуль Sonar не может найти файл отчета, созданный Jacoco.

в вашем pom (родитель или ребенок) ищите <destFile> тег под jacoco/prepare-agent исполнения. Измените имя и местоположение на target/jacoco.exec и вы хорошо идти!