В современной разработке все чаще предъявляются высокие требования к качеству кода и неукоснительному следованию стандартам качества кода в командах. Обеспечение качества кода, а также решение многих других задач, связанных с разработкой и поддержанием «чистого» кода, берёт на себя популярный инструмент анализа — SonarQube.

Меня зовут Николай, я 1С-разработчик в SimbirSoft и в этой статье хочу подробно рассказать о процессе установки и настройки SonarQube в ОС Linux.

Введение

SonarQubeплатформа с открытым исходным кодом для непрерывного анализа и измерения качества программного кода. Она поддерживает около 30 языков программирования, включая 1С.

Основные задачи, которые решает SonarQube:

  • статический анализ кода;

  • оценка сложности кода;

  • поиск потенциальных уязвимостей и ошибок в коде;

  • интеграция в конвейеры непрерывной интеграции (CI/CD).

Преимущества использования SonarQube:

  • Автоматизация анализа кода – кодовая база периодически проверяется на соответствие принятым стандартам используемого языка программирования и проекта. 

  • Поиск потенциальных ошибок, неоптимальных решений и уязвимостей в коде.

  • Оценка цикломатической и когнитивной сложности кода.

  • Оценка «технического долга» и расчет времени, необходимого на его устранение.

  • Анализ дублирования кода.

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

  • Душевное спокойствие технического руководителя проекта.

В разработке ПО SonarQube помогает выявлять ошибки, устранять их на ранних этапах и следить за ключевыми показателями качества кода. Установка и использование SonarQube будет хорошим вложением в инфраструктуру вашей компании или проекта. 

В статье я продемонстрировал установку SonarQube на операционной системе Linux. Использование этой ОС зачастую является хорошим выбором с точки зрения скорости работы, быстродействия и безопасности. В то же время в Linux часто требуется установка и настройка программ и дополнительных компонентов. В статье я предоставил подробное руководство по установке и базовой настройке платформы SonarQube.

Подготовительные действия к установке SonarQube

Прежде чем установить SonarQube, потребуется установить программы, без которых работа SonarQube будет невозможна или крайне затруднительной — это виртуальная машина Java и сервер баз данных PostgreSQL.

Для работы SonarQube нам понадобится Java 17-ой версии.

sudo apt install openjdk-17-jdk -y

Проверим, что установка Java прошла успешно:

java --version

Далее установим версию PostgreSQL Pro с патчами для 1С с сайта.

wget https://repo.postgrespro.ru/pg1c-16/keys/pgpro-repo-add.sh
sudo sh pgpro-repo-add.sh
sudo apt-get install -y postgrespro-1c-16

С установкой закончили, запустим службу:

sudo systemctl start postgrespro-1c-16

Проверим статус службы:

sudo service postgrespro-1c-14 status

Надеюсь, вы получили такой же результат — это значит, что установка PostgreSQL прошла успешно, и можно двигаться дальше.

Создадим базу данных для SonarQube:

sudo passwd postgres
su - postgres

createuser sonar
psql 
ALTER USER sonar WITH ENCRYPTED password 'sonar';
CREATE DATABASE sonarqube OWNER sonar;
grant all privileges on DATABASE sonarqube to sonar;
\q

exit

Перейдем к настройкам системы. Для работы SonarQube необходимо настроить лимиты аппаратных ресурсов операционной системы. Откроем системный файл limits.conf под суперпользователем:

sudo vim /etc/security/limits.conf

Добавим следующие строки в конец файла: 

sonarqube   -   nofile   65536
sonarqube   -   nproc    4096

Эти параметры увеличивают лимит открытых файлов и создание дочерних процессов. Без этих настроек при работе над большими проектами можно получить ошибки:

Too many files или Cannot create new thread.

Следующая настройка, которую необходимо поместить в конец файла sysctl.conf

sudo vim /etc/sysctl.conf

vm.max_map_count = 262144

Она отвечает за то, как SonarQube использует Elasticsearch для хранения и поиска данных. Elasticsearch активно использует memory mappings для работы с индексами. Если лимит слишком низкий, это может привести к ошибкам, например:

max virtual memory areas vm.max_map_count [65530] is too low

Установка и настройка SonarQube

Скачиваем последний релиз SonarQube версию Community следующей командой:

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.0.65466.zip

Если нет пакета unzip для распаковки zip-архивов, устанавливаем

sudo apt install unzip

Размещаем в домашнюю папку текущего пользователя и перенесем в папку постоянной дислокации приложения:

sudo unzip sonarqube-25.3.0.104237.zip -d ~
sudo mv sonarqube-25.3.0.104237 /opt/sonarqube

Создадим отдельного пользователя sonar для запуска SonarQube, а также группу sonar и дадим новому пользователю права на папку /opt/sonarqube. SonarQube не может быть запущен под правами суперпользователя. 

sudo groupadd sonar
sudo useradd -c "user to run SonarQube" -d /opt/sonarqube -g sonar sonar

Установим права на папку с распакованным дистрибутивом SonarQube для нового пользователя:

sudo chown sonar:sonar /opt/sonarqube -R

Осталось только настроить приложение, для этого внесем изменения в конфигурационный файл sonar.properties 

Настроим подключение к базе данных, которую мы создали ранее:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

Укажем пути размещения данных и временных файлов:

sonar.path.data=/opt/sonarqube/data
sonar.path.temp=/opt/sonarqube/temp

Установим некоторые настройки сервиса ComputeEngine

sonar.ce.javaOpts=-Xmx4G -Xms1G -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError

SonarQube готов к работе. Попробуем запустить — сделать это можно командой, которая запустит наш экземпляр SonarQube в режиме приложения:

/opt/sonarqube/bin/linux-x86-x64/sonar.sh console

Давайте проверим наш SonarQube и войдем на веб-сервер SonarQube, по умолчанию доступным сетевым адресом сервера будет http://<IP-адрес сервера>:9000

Логин и пароль по умолчанию: admin admin

После входа будет предложено поменять пароль, устанавливаем его и входим в панель управления SonarQube.

Создадим нового пользователя, под ним sonarscanner будет подключаться к SonarQube

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

Добавим токен, он понадобится для подключения sonarscanner к SonarQube:

Вводим любое имя, Expires in — No expiration:

Записываем токен, чтобы не забыть. Он появляется только один раз при создании!

Пока не закрыли окно веб-интерфейса, установим плагин 1С, который и позволит  добавить поддержку языка 1С в SonarQube. Сделать это можно двумя способами:

  1.  Непосредственно из Маркетплейса. 

  2. Скачав плагин с сайта разработчика и установив его вручную.

Перейдем в раздел Administration — Marketplace:

Если после нажатия кнопки Install вы увидите надпись Install Pending, это означает, что плагин успешно скачан и будет установлен при перезапуске службы SonarQube.

Перезапустить службу можно из веб-интерфейса, перейдя в раздел меню Administration — System — Restart Server и дождаться завершения перезапуска.

После этого зайдите в Marketplace, чтобы убедиться что плагин успешно установлен.

Установить его также можно вручную, для этого — скачанный плагин необходимо поместить в папку /opt/sonarqube/extensions. После перезапуска он окажется в папке plugins. 

Плагин успешно установлен, перейдем в его настройки: Administration — Configuration. 1C (BSL). В большинстве случаев имеет смысл установить Пропускать расчет диагностик в модулях «на поддержке» в значение with support locked плагин не будет анализировать модули на поддержке и если в модуле не разрешены изменения.

Осталось установить sonarscanner — инструмент, который будет сканировать исходный код и передавать результаты проверки в SonarScanner. Загрузить sonarscanner можно по ссылке:

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.0.2.4839-linux-x64.zip

Распаковать ее в папку /opt можно командой:

unzip ~/sonar-scanner-cli-7.0.2.4839-linux-x64.zip -d /opt/
cd /opt/
sudo  mv sonar-scanner-7.0.2.4839-linux-x64/ /opt/sonarscanner/

После выполнения вышеприведенных команд каталог с файлами sonarscanner должен располагаться в папке /opt/sonarscanner. 

Как использовать sonarscanner? Для сканирования кода проекта с помощью sonarscanner необходимо запустить файл sonar-scanner из каталога bin, указав в аргументах запускаемого файла параметры для уточнения параметра сканирования файлов с исходным кодом. Вместо указания параметров непосредственно в командной строке допускается создать конфигурационный файл, в котором можно описать все необходимые параметры сканирования.

Подробнее о параметрах ты можешь прочитать на сайте SonarScanner CLI | SonarQube Server Documentation.

Приведу пример конфигурационного файла и запуска sonar-scanner:

# идентификатор проекта, используется для связи результатов анализа с конкретным проектом на сервере, обязательный параметр
sonar.projectKey=your_project
sonar.login= ваш_токен
# URL сервера на который будут отправлены результаты сканирования проекта
sonar.host.url=http://localhost:9000
# корневой каталог к файлам проекта
sonar.projectBaseDir=/opt/sonarqube/projects/unf
# указание папки с исходным кодом проекта
sonar.sources=src
# указание фильтра какие файлы необходимо сканировать
sonar.inclusions=**/*.bsl, **/*.os
# задает понятное имя проекта которое будет отображаться в интерфейсе SonarQube
sonar.projectName=Ваш проект
# кодировка файлов 
sonar.sourceEncoding=utf-8
# фильтр файлов для исключения из сканирования
sonar.exclusions=**/*.html,**/Ext/Help.xml,**/Ext/Template.xml,**/Templates/**/*.xml,**/Ext/Predefined.xml,sonar.lang.patterns.xml=**/*.xsd,**/*.xsl
# Пропускать файлы на поддержке поставщика без возможности редактирования со статусом "Не редактируется"
sonar.bsl.skipVendorSupportedObjects=true

Пример запуска sonar scanner

sonar-scanner -X -Dproject.settings=/path/to/config/project.properties

Напоследок, установим SonarQube как службу, отредактируем файл 

sudo vim /etc/systemd/system/sonar.service

Добавим следующее содержимое

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking

ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

User=sonar
Group=sonar
Restart=always

LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target

и установим SonarQube как службу

sudo systemctl start sonar
sudo systemctl enable sonar
sudo systemctl status sonar

Проверим логи новоиспеченной службы, все ли в порядке?!

sudo tail -f /opt/sonarqube/logs/sonar.log

Подведем итоги

Итак, мы подробно рассмотрели процесс установки и настройки SonarQube. 

В результате мы выполнили следующие важные шаги: 

  • Установили базу данных PostgreSQL для хранения результатов сканирования.

  • Подготовили среду исполнения: установили и настроили Java.

  • Развернули и сконфигурировали сервер SonarQube.

  • Добавили плагин для поддержки анализа кода на языке 1С.

  • Настроили Sonar Scanner и изучили принципы создания конфигурационных файлов для сканирования проектов.

Надеюсь, это руководство окажется полезным в твоей работе. Спасибо за внимание! Подписывайся на наши соцсети и блог, где мы публикуем другие полезные материалы, в том числе и для 1С-специалистов:

Дзен

Комментарии (4)


  1. Re1ter
    14.08.2025 15:32

    Небольшое дополнение: если вы запускаете сканирование где-то в CI, а затем отправляете результаты на сервер, который использует самоподписанный сертификат, то сертификат нужно будет добавить в локальное хранилище sonarscanner, что делается несколько нетривиально:

    keytool -importcert -file /usr/local/share/ca-certificates/mycert.crt -keystore $SONAR_USER_HOME/ssl/truststore.p12 -storepass changeit -noprompt


    1. ashkraba
      14.08.2025 15:32

      Ну и к Вашему комментарии небольшое уточнение) Нужно добавить в хранилище не sonarсканера, а в хранилище сертификатов java, и такое же поведение будет у всех javabased приложений))) Просто у sonara задан такой путь до truststore, но он может быть и другим.


      1. Re1ter
        14.08.2025 15:32

        Ну, я разворачивал сонар на проектах .net, и конечно же добавлял сертификаты в системное хранилище (безуспешно), поэтому такое поведение мне совсем не показалось очевидным.


  1. RomanKu
    14.08.2025 15:32

    Далее установим версию PostgreSQL Pro с патчами для 1С с сайта.

    А с обычной версией PostgreSQL SonarQube не работает? Почему именно с патчами для 1С?