SonarQube + Maven + JaCoCo + GitLab CI: Sonar начал показывать покрытие кода 0% после обновления до SonarQube 7.9.2 - PullRequest
0 голосов
/ 15 апреля 2020

После того, как мы обновили наш SonarQube до Version 7.9.2 (build 30863), Community Edition, при запуске GitLab CI Pipeline показывается покрытие 0.0% (падение примерно с 86.2%), хотя Sonar показывает все юнит-тесты.

Сборка Maven Выполненный в .gitlab-ci.yml выглядит следующим образом:

    - mvn test sonar:sonar -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}

Очевидно, что это связано с пресловутыми настройками плагина sonar.coverage.jacoco.xmlReportPaths и sonar.jacoco.reportPaths Sonar-JaCoCo (см. https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166) .

Просмотрев журналы конвейерных заданий, я обнаружил следующее (имя проекта скрыто myProject):

Перед обновлением SonarQube:

[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=87ms
[INFO] Sensor JaCoCoSensor [java]
[WARNING] Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format). Please check that the JaCoCo plugin is installed on your SonarQube Instance.
[INFO] Analysing /builds/myProject/target/jacoco.exec
[INFO] Sensor JaCoCoSensor [java] (done) | time=206ms

После обновления SonarQube:

[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=86ms
[INFO] Sensor JavaXmlSensor [java]
[INFO] 1 source files to be analyzed
[INFO] Sensor JavaXmlSensor [java] (done) | time=302ms

Поэтому, очевидно, есть некоторые различия в настройке sonar.jacoco.reportPaths. Примечательно, что я не устанавливаю явно ни одну из двух настроек.

Как исправить синтаксический анализ отчета JaCoCo, чтобы он работал (независимо от старой или новой настройки)?

1 Ответ

1 голос
/ 15 апреля 2020

Быстрый ответ

Заменить mvn test на mvn verify. Не требуется явного объявления настроек.

Мой процесс расследования

Я пытался выполнить сборки с явными значениями настроек по умолчанию.

1) Явное значение по умолчанию устаревшей настройки: -Dsonar.jacoco.reportPaths=target/jacoco.exec.

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

[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=57ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=23ms
[INFO] Sensor Removed properties sensor [java]
[WARNING] Property 'sonar.jacoco.reportPaths' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin.
[INFO] Sensor Removed properties sensor [java] (done) | time=1ms

Очевидно, покрытие остается на уровне 0.0%.

См. также вопрос об Ant, относящийся к данной теме, по этой теме c: Отображение покрытия кода Sonar с помощью файла jacoco.exe c в Sonar LTS 7.9.2 .

2) Явное значение по умолчанию для новой настройки: -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml

Примечание: , хотя это значение по умолчанию не является ( по какой-то причине) задокументировано на https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166, я только что нашел его, выполнив поиск jacoco.xml в моем локальном каталоге target.

Покрытие осталось на 0.0%, и журнал заданий GitLab CI начал наконец показывать что-то ясное:

[INFO] Sensor SonarCSS Rules [cssfamily] (done) | time=1ms
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[WARNING] Report doesn't exist: '/builds/myProject/target/site/jacoco/jacoco.xml'
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=4ms
[INFO] Sensor SurefireSensor [java]

! Это Жаль, что этот журнал не пишется при запуске без явных настроек. Это значительно упростит расследование.

Так что теперь у нас есть понимание: /target/site не генерируется в моем конвейере GitLab CI. Очевидно, это связано с тем, что скрипт содержит только mvn test, что недостаточно для жизненного цикла сборки Maven .

Изучение примеров Maven + Sonar: они содержат mvn verify sonar:sonar или mvn install sonar:sonar.

Поэтому здесь мы go:

3) mvn verify + явное значение по умолчанию для новой настройки: -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml

Это сработало! Покрытие отображается в SonarQube, и в части журнала, связанной с JaCoCo, нет ошибок:

[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=94ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=92ms
[INFO] Sensor JavaXmlSensor [java]
[INFO] Sensor JavaXmlSensor [java] (done) | time=7ms

4) mvn verify без явной настройки.

Итак, наконец, я пробовал без каких-либо значений настроек, и это работает:

  - mvn verify sonar:sonar -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}

Сводка

  • Старая sonar.jacoco.reportPaths настройка не работает на новых версиях SonarQube (7.9.2+).
  • Значение по умолчанию для новой настройки sonar.coverage.jacoco.xmlReportPaths равно target/site/jacoco/jacoco.xml.
  • Причина root состояла в том, что каталог /target/site/jacoco не был создан (включая jacoco.xml и все другие файлы Отчет JaCoCo)
  • Все, что мне нужно сделать, это заменить mvn test на mvn verify.
  • Ошибка главного сонара не записывает журнал ошибок о "файле отчета не найден", когда значение sonar.coverage.jacoco.xmlReportPaths явно не установлено. Было бы хорошо, если бы разработчики SonarQube это исправили.
...