В Community Edition SonarQube нет анализа веток. Вообще. Хотите знать, что сломалось в feature-ветке до мёрджа — платите за Developer Edition. Минимум 15 тысяч евро в год.
Но разработчики не сдаются. Появился community branch plugin, который добавляет эту функциональность бесплатно. Только вот насколько это хорошее решение? Давайте разберёмся честно, без маркетинговой шелухи.
Почему SonarQube не умеет ветки в бесплатной версии
SonarSource, компания за SonarQube, зарабатывает на Enterprise-лицензиях. Branch analysis — одна из фич, которую они намеренно вырезали из Community Edition. Это не баг, это бизнес-модель.
Логика простая: хотите CI/CD pipeline с качественным анализом пул-реквестов — платите. Для небольших команд это боль. На одном проекте мы считали: три разработчика, лицензия Developer Edition стоит как два наших месячных оклада. Нонсенс.
Что получаете за деньги в платных версиях:
- Анализ отдельных веток и пул-реквестов
- PR decoration — комментарии прямо в GitLab/GitHub
- Deep inspection для 29 языков вместо 15 в Community
Короче, всё то, что нужно нормальной команде для ежедневной работы.
Community Branch Plugin: что это и как работает
SonarQube community branch plugin — это неофициальное расширение, написанное энтузиастами. Добавляет анализ веток в Community Edition. Ставится как обычный плагин, скачивается с GitHub Releases.
# Скачиваем плагин
wget https://github.com/mc1arke/sonarqube-community-branch-plugin/releases/download/1.14.0/sonarqube-community-branch-plugin-1.14.0.jar
# Копируем в директорию плагинов SonarQube
cp sonarqube-community-branch-plugin-1.14.0.jar /opt/sonarqube/extensions/plugins/
# Перезапускаем SonarQube
docker restart sonarqube
После этого в интерфейсе появляются настройки branch analysis. Плагин патчит SonarQube на лету, добавляя недостающую логику.
Для анализа ветки запускаете сканер с параметром:
sonar-scanner \
-Dsonar.branch.name=feature/new-auth \
-Dsonar.branch.target=main
В Jenkins pipeline это выглядит так:
stage('SonarQube Analysis') {
steps {
script {
scannerHome = tool 'SonarQubeScanner'
}
withSonarQubeEnv('MySonarQube') {
sh """
${scannerHome}/bin/sonar-scanner \
-Dsonar.branch.name=${env.BRANCH_NAME} \
-Dsonar.branch.target=main
"""
}
}
}
Работает. Анализирует. Показывает diff относительно целевой ветки.
Проблемы плагина, о которых молчат туториалы
Первое и главное: плагин неофициальный. SonarSource не имеет к нему отношения и время от времени высказывает недовольство его существованием. Юридически — серая зона.
Вторая проблема — совместимость. Каждая версия плагина работает с определёнными версиями SonarQube. Обновили SonarQube — плагин может сломаться.
# Пример таблицы совместимости из документации плагина
# Plugin 1.14.0 -> SonarQube 9.x
# Plugin 1.8.0 -> SonarQube 8.9 LTS
# Plugin 1.3.0 -> SonarQube 7.9 LTS
На одном проекте мы обновились с SonarQube 8.9 на 9.3. Плагин перестал работать. Ждали совместимую версию три недели. Три недели команда жила без анализа веток.
Третья проблема — нет PR decoration из коробки. Плагин умеет анализировать ветки, но не умеет писать комментарии в GitHub или GitLab. Для этого нужно ставить ещё один плагин — community-platform-plugin. Или писать велосипед на CI/CD скриптах.
Четвёртая: качество кода самого плагина. Это open-source проект, поддерживаемый энтузиастами. Баги есть, документация местами устаревшая. Если что-то сломается — поддержки нет, только GitHub Issues.
Сравнение подходов к branch analysis
| Критерий | Community + Plugin | Developer Edition | SonarCloud |
|---|---|---|---|
| Цена | Бесплатно | от €15,000/год | от €10/месяц |
| Анализ веток | Да | Да | Да |
| PR decoration | С костылями | Да | Да |
| Поддержка | Сообщество | Официальная | Официальная |
| Серверы | Ваши | Ваши | Облачные |
| Данные | У вас | У вас | В облаке |
| Стабильность | Средняя | Высокая | Высокая |
| Обновления | С задержкой | Вовремя | Автоматически |
SonarCloud выглядит компромиссом, но есть нюанс: данные уходят в облако. Для компаний с требованиями по локализации данных это не вариант.
Когда плагин имеет смысл
Честно? Если вы стартап или небольшая команда до 10 человек, и нет денег на лицензию. И при этом готовы к тому, что однажды анализ веток отвалится после очередного обновления.
Если у вас строгие требования по хранению данных в РФ — плагин даёт возможность держать всё на своих серверах. Это плюс.
Но если у вас серьёзный enterprise-проект с SLA и ответственностью перед заказчиком — плагин это риск. Один сломанный CI/CD pipeline после обновления может стоить дороже, чем лицензия.
Альтернативы: что ещё смотрим
GitHub Advanced Security — хороший вариант, если вы на GitHub. Но дорого и данные в облаке. GitLab Ultimate включает SAST/DAST, но это тоже enterprise-тариф.
Есть российские решения. Собственно, про это и говорю.
Distiq — это AI-бот для code review, который интегрируется в GitLab, GitHub и GitVerse. Анализирует каждый MR/PR, находит баги, уязвимости, проблемы с производительностью. Оставляет инлайн-комментарии, как живой ревьювер.
# Интеграция — это буквально добавление webhook
# .gitlab-ci.yml
distiq-review:
stage: test
script:
- curl -X POST https://api.distiq.ru/webhook/$DISTIQ_PROJECT_ID
only:
- merge_requests
Серверы в России, данные не уходят за рубеж. Для компаний, которые по 152-ФЗ или внутренним регламентам не могут использовать зарубежные облака — это реальный вариант.
По деньгам получается дешевле, чем SonarQube Developer Edition. И никакого самолечения плагинами.
Итог
SonarQube community branch plugin — рабочее решение для тех, кто готов мириться с рисками. Если бюджет нулевой, а branch analysis нужен — ставьте. Только зафиксируйте версии и не обновляйтесь без необходимости.
Для продакшн-проектов лучше рассмотреть либо официальные версии SonarQube, либо альтернативы. Distiq как вариант — российский, работает с GitLab и GitHub, не требует выкручивания рук плагинами.
Выбор за вами. Но помните: бесплатный сыр бывает только в мышеловке. А мышеловка в продакшене — это инциденты.
