#java #sonarqube #bamboo
#java #sonarqube #bamboo
Вопрос:
Bamboo создан для выполнения непрерывных сборок, но я хочу использовать Sonar для отслеживания показателей качества. В Bamboo должны быть зафиксированы показатели прохождения / сбоя модульного теста и покрытия кода Clover. Но эти же значения также следует отправлять в Sonar, чтобы не увеличивать продолжительность сборки, дважды запуская модульные тесты и Clover.
Удалось отправить эти показатели из сборок Bamboo в Sonar, используя директиву «sonar.dynamicAnalysis= Отчеты о повторном использовании» в сборке maven. Но показатель «Соответствие правилам» в Sonar равен 0%.
На основе предварительной настройки без использования директивы оценка соответствия правилам выше. Итак, ясно, что использование директивы каким-то образом предотвращает вычисление этой метрики.
Кто-нибудь знает, как использовать эту директиву и получить оценку соответствия правилам? Или они могут указать на что-то, на что нужно обратить внимание, чтобы помочь в диагностике? Запуск maven с опцией «-e» не предоставил ничего особенно полезного.
Ответ №1:
После долгих поисков и ошибок я, наконец, смог заставить Sonar, Jacoco и Bamboo гармонично работать вместе. Я задокументировал процесс здесь! , но я скопирую свое решение здесь, чтобы убедиться, что оно всегда доступно.
Для моего приложения я фактически использовал sonar runner tasks. У вас есть более подробные инструкции по установке и настройке sonar-runner, которые не упомянуты в руководстве по установке. Сначала вы должны установить sonar-runner и указать следующие свойства в вашем sonar-runner.properties:
#----- Default Sonar server
sonar.host.url=http://localhost:9000
#sonar.jdbc.url=jdbc:postgresql://localhost/sonar
#sonar.jdbc.driver=org.postgresql.Driver
#----- Global database settings
sonar.jdbc.username=user
sonar.jdbc.password=passwd
Включите xmln-файлы jacoco в свой скрипт сборки ant вверху:
<project basedir="." default="build" name="project" xmlns:jacoco="antlib:org.jacoco.ant">
<property environment="env" />
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="libs/independent/jacocoant.jar"/>
</taskdef>
Далее вам нужно добавить покрытие jacoco в ваш сценарий сборки ant:
<jacoco:coverage enabled="${tests.code.coverage}" destfile="${jacoco.exec.dest}">
<junit fork="yes" printsummary="withOutAndErr" dir="${tests.working.dir}">
...
Наконец, вам нужно указать sonar из bamboo использовать результаты jacoco и повторно использовать отчеты, сгенерированные в вашей сборке. Вы делаете это, добавляя следующие свойства к вашим «Пользовательским дополнительным параметрам» в настройке задачи для анализа сонара в задании Bamboo. Настройте следующие параметры:
-DbuildNumber=${bamboo.buildNumber}
-Dsonar.core.codeCoveragePlugin=jacoco
-Dsonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec
-Dsonar.dynamicAnalysis=reuseReports
-Dsonar.surefire.reportsPath=tests/test-reports
Как только я все это настроил, мое тестовое покрытие начало отображаться в sonar со списком # successful tests.
Просто убедитесь, что вы установили свойство sunfire для повторного использования их отчетов, сгенерированных на основе ваших модульных тестов. В противном случае sonar не будет знать, где их найти, даже если вы укажете ему повторно использовать отчеты. Надеюсь, это поможет при вашей следующей попытке.
Комментарии:
1. 1 — спасибо за подробный отзыв, высоко ценится за сложные проблемы интеграции, подобные этой!
2. Давно с этим не возился, отмечая как принятый ответ на основе отзывов других людей и явных усилий, приложенных к ответу.