Вопрос: как использовать sonarQube от Maven для сбора инкрементного анализа перед фиксацией?
Общие сведения. Мы используем SonarQube 4.1.2 для анализа проекта Java, созданного с помощью Maven. Мы установили плагин Issues Report 1.1 на сервер.
Я включил добавочные отчеты в консоли сборки и вижу, что добавочные данные правильно предоставляются с сервера непрерывной интеграции с помощью команды maven: mvn org.codehaus.mojo:sonar-maven-plugin:2.3.1:sonar -P sonar -Dsonar.java.target=1.7 -Dsonar.java.source=1.7 -Dsonar.profile=MyProfileName -Dsonar.branch=branchID
Существует связанный профиль Maven:
<profile>
<id>sonar</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<sonar.hostname>mySonarHostName</sonar.hostname>
<sonar.host.url>http://${sonar.hostname}:9000</sonar.host.url>
<sonar.jdbc.url>jdbc:oracle:thin:@${sonar.hostname}:1521/sabrixdb</sonar.jdbc.url>
<sonar.jdbc.username>dbusername</sonar.jdbc.username>
<sonar.jdbc.password>dbpassword</sonar.jdbc.password>
<sonar.jdbc.driver>oracle.jdbc.driver.OracleDriver</sonar.jdbc.driver>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
</properties>
</profile>
Из журналов сервера непрерывной интеграции CI я вижу добавочные отчеты на консоли, как и ожидалось:
build 14-Jul-2014 15:40:37 [INFO] [15:40:37.699]
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 ------------- Issues Report -------------
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 +3 issues
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 +3 major
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 -------------------------------------------
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37
Когда это вызывается с машины разработки для инкрементного анализа с помощью команды: mvn org.codehaus.mojo:sonar-maven-plugin:2.3.1:sonar -Dsonar.profile=MyProfileName -Dsonar.branch=branchID -Dsonar.analysis.mode=incremental -Dsonar.host.url=http://mySonarHostName:9000 -Dsonar.issuesReport.html.enable=true -Dsonar.issuesReport.console.enable=true -Dsonar.dynamicAnalysis=reuseReports
Я получаю добавочный отчет, в котором есть гораздо больше проблем, которые можно было бы ожидать для измененного кода. Любопытно, что число здесь также больше, чем общее количество проблем для проекта, измеренное на сервере sonarQube:
------------- Issues Report -------------
+65058 issues
+42709 major
+2287 minor
+20062 info
-------------------------------------------
Справочные ссылки В рамках моего расследования я просматривал следующие ссылки:
Три варианта анализа перед фиксацией http://www.sonarqube.org/three-options-for-pre-commit-analysis/
Анализ, предварительный просмотр и дополнительный предварительный просмотр в SonarQube http://www.sonarqube.org/analysis-vs-preview-vs-incremental-preview-in-sonarqube/
Подключаемый модуль отчетов о проблемах http://docs.sonarqube.org/display/SONAR/Issues+Report+Plugin
Плагин CodeHaus Sonar Maven http://mojo.codehaus.org/sonar-maven-plugin/plugin-info.html
Обновление (16.07.2014) Заметил эту тему [http://sonarqube.15.x6.nabble.com/Incremental-run-mode-td5024228.html]. Это объясняет, что инкрементальный метод работает с хэшем файла, чтобы определить, какие файлы анализировать.
Проект, над которым я работаю, сгенерировал код, который эхолоту не было приказано игнорировать. Я предполагаю, что это вызывает дополнительный отток (помимо того, что это просто плохая идея сканировать сгенерированный машиной код). Чтобы исследовать эту теорию, я добавляю -Dsonar.exclusions=com/generatedpackage/**/*.java
к команде.
Обновление (17.07.2014)
За счет указания сгенерированных источников в sonar.exclusions было уменьшено количество выявляемых нарушений при «инкрементальном» анализе. Как только все это было учтено, количество проблем/нарушений совпало с количеством проблем, которые я ввел для проверки процесса на месте. Чтобы упростить обслуживание этого, я затем упростил подавление метрик для всех сгенерированных файлов, используя следующий шаблон: file:**/generated*/**
Для единообразия я смог указать это в корневом POM анализируемого проекта.
<sonar.exclusions>file:**/generated*/**</sonar.exclusions>
Как упоминалось выше, в ветке форума Sonar Qube поясняется, что инкрементный анализ будет анализировать только те файлы, хэш которых не совпадает с хешированными файлами на сервере Sonar Qube.