Bamboo sonar.dynamicAnalysis = Отчеты о повторном использовании = 0% соответствия правилам

#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. Давно с этим не возился, отмечая как принятый ответ на основе отзывов других людей и явных усилий, приложенных к ответу.

Ответ №2:

Пожалуйста, перейдите к следующему

Ссылка и ссылка 2