Автоматически выводить обязательные свойства SonarQube из POM-файла в Jenkins

ситуация:

Я хочу проанализировать свой проект с помощью SonarQube (5.4), инициированного Дженкинсом (1.642.4). Это сборка проекта java с maven.

Я вижу два способа запуска анализа:

  1. Post Build Action "анализ SonarQube с maven", но это устаревший, Так что я не хочу использовать
  2. шаг сборки Post "выполнить сканер SonarQube", рекомендуется путь.

проблема:

Если я использую устаревшее действие Post Build, свойства для конфигурации проекта sonar автоматически выводятся из project pom.

Я использую рекомендуемый шаг сборки Post, Я получаю исключение

необходимо определить следующие обязательные свойства для 'Unknown': sonar.projectKey, сонар.имя_проекта, сонар.проектверсия, сонар.источники

Нежелательное Решение:

решение заключается в предоставлении необходимых свойств через sonar-project.файл свойств в проекте java или через параметры на шаге Дженкинса.

ИМХО: это дублирование. Вся соответствующая информация определяется в Maven pom: projectKey может быть получена из artifactId, projectName и projectVerstion являются одинаковыми свойствами в maven. Особенно важна проектверсия. Я не хочу обновите версию проекта после каждого выпуска (или напишите код в плагине выпуска, чтобы обновить его автоматически).

что я хочу!--2-->

Я хочу использовать рекомендуемый шаг сборки Post в Jenkins, без переопределения всех свойств проекта для всего моего проекта, чтобы сделать сонар счастливым. Вместо этого sonar/jenkins/plugin / все, что должно получить свойства из моего файла maven pom. Есть дополнительный плагин, который я могу использовать? Могу ли я перенастроить свой Дженкинс-Сонар-Плагин?

Я не хочу предоставлять какую-либо конкретную информацию о сонаре в моем pom/project, потому что проект не должен заботиться о сонаре. Он должен содержать только информацию, необходимую для построения проекта.

2 ответов


документация (хотя это немного запутанно, см. edit ниже) объясняет, как использовать общий шаг после сборки (использование переменных среды) вместо устаревшего действия после сборки. короче:

  • установить последний плагин SonarQube (v2.4 на данный момент) в Дженкинсе
  • в конфигурации системы под серверами SonarQube: проверьте Enable injection of SonarQube server configuration as build environment variables
  • в конфигурации вашего проекта Maven:
    • Регистрация Prepare SonarQube Scanner environment
    • добавить шаг после сборки Invoke top-level Maven targets и использовать введенные переменные среды в Goals поле например:

      $SONAR_MAVEN_GOAL-Dsonar.хозяин.URL-адрес=$SONAR_HOST_URL -Dsonar.login=$SONAR_AUTH_TOKEN

редактировать: для документация говорит The Post-build Action for Maven analysis is deprecated., это относится к старому post-build действие который больше не документирован. Пункт после это предупреждение (резюмированное в этом ответе) действительно является рекомендуемой процедурой. Иллюстрация здесь если это все еще не ясно.


используя сканер SonarQube в качестве шага сборки post, вы можете настроить его, по крайней мере, с этими свойствами в свойствах анализа:

sonar.projectKey=${POM_ARTIFACTID}
sonar.projectName=${POM_DISPLAYNAME}
sonar.projectVersion=${POM_VERSION}
sonar.sources=src
sonar.java.binaries=target
sonar.language=java
sonar.sourceEncoding=UTF-8

POM_* переменные отображаются Дженкинсом из maven GAV info, смотрите здесь:https://github.com/jenkinsci/jenkins/pull/933/files