Как использовать sonarQube из Maven для сбора инкрементального анализа перед фиксацией

Вопрос: Как использовать sonarQube из Maven для сбора инкрементального анализа перед фиксацией?

Справочная информация: Мы используем SonarQube 4.1.2 для выполнения анализа Java-проекта, созданного с помощью Maven. Мы установили плагин Report 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

Обновление (2014/07/16) Заметил эту тему [ http://sonarqube.15.x6.nabble.com/Incremental-run-mode-td5024228.html]. Это объясняет, что инкремент обрабатывает хеш файла, чтобы определить, какие файлы анализировать.

Проект, над которым я работаю, сгенерировал код, который сонар не должен игнорировать. Я постулирую, что это вызывает дополнительный отток (кроме того, это просто плохая идея для сканирования машинного кода). Чтобы исследовать эту теорию, я добавляю -Dsonar.exclusions=com/generatedpackage/**/*.java в команду.

Обновление (2014/07/17)

Указав сгенерированные источники в sonar.exclusion, количество нарушений, обнаруженных для "инкрементального" анализа, было уменьшено. После того как все они были учтены, количество проблем / нарушений было приведено в соответствие с количеством проблем, которые я представил для проверки процесса на месте. Чтобы упростить поддержку этого, я затем упростил подавленные метрики для всех сгенерированных файлов, используя следующий шаблон: file:**/generated*/**

Для единообразия я смог указать это в корневом POM анализируемого проекта.

<sonar.exclusions>file:**/generated*/**</sonar.exclusions>

Как упоминалось выше, в ветке форума сонара Qube объясняется, что при инкрементальном анализе будут анализироваться только те файлы, хэш которых не совпадает с хешированными файлами на сервере сонара Qube.

1 ответ

Решение

Ключ к успешному использованию этого был двояким: 1) Убедитесь, что плагин "Отчет о проблемах" установлен на сервере sonarQube. 2) Укажите sonar.exclusion, чтобы исключить сгенерированные источники.

С этим в руке и профилем "сонара" пользователю нужно только добавить этот профиль "сонара" и цель sonar: sonar к команде maven

Это меняет:

mvn clean install -P myProfile

Для того, чтобы:

mvn clean install sonar:sonar -P myProfile,sonar 

Профиль maven может привязать цель сонара к фазе проверки, чтобы исключить необходимость указания цели при добавлении профиля. Я решил не связывать плагин, чтобы позволить себе немного больше гибкости.

Этого было достаточно, чтобы пользователи могли проверить инкрементный код.

Другие вопросы по тегам