Покажу установку SonarQube для анализа кода проектов 1С.
На сайте SonarQube есть исчерпывающая документация, в интернете множество инструкций под разные операционные системы и архитектуры. Самый универсальный способ контейнеры Docker в Linux.
Зачем нужен анализ кода и как решать управленческие вопросы, в статье не рассматриваю. Дальше инструкция, как всё поднять за несколько минут.
- Архитектура и структура
- Установка Docker
- Подготовка и развертывание контейнеров
- Настройка docker-compose.yml
- Подготовка плагинов 1C (BSL) и Русского я зыка
- Запуск SonarQube
- Первый вход и настройка
- Скрипт для запуска анализа качества кода
- Добавление проекта для анализа
- Каталоги и настройки проекта
- Токен доступа для сканера
- Запуск анализа проекта
Архитектура и структура
Всё необходимое работает в контейнерах Docker: SonarQube и СУБД PostgreSQL. Также будет задействован контейнер SonarScanner. Его образ сохранится при первом запуске, а при каждом запуске будет создаваться новый контейнер и удаляться по завершении работы. Если честно, тут просто захотелось поиграться.
Вместе с SonarQube будут установлены плагины: SonarQube 1C (BSL) Community Plugin и SonarQube Russian Language Pack.
Теперь о структуре каталогов. Весь проект назвал CodeQualityAnalysis и разместил в каталоге Projects домашней директории. Далее везде использую этот путь, если нужно меняйте.
Остановился на структуре, где инфраструктура Docker отделена от анализируемых проектов.
~/Projects/CodeQualityAnalysis/ # Корень ├── sonarqube-docker/ # Docker-инфраструктура │ ├── docker-compose.yml # Конфигурация сервисов в Docker │ └── extensions/ │ └── plugins/ # Плагины SonarQube ├── ConfigurationFiles/ # Каталог проектов 1С │ └── ИмяПроекта/ # Директория конкретного проекта │ ├── sonar-project.properties # Настройки анализа │ └── src/ # Исходный код (.bsl/.os файлы) └── scan.sh # Скрипт запуска анализа
Это позволяет легко добавлять новые проекты, достаточно создать ещё один каталог и файл описания проекта.
Рекурсивно создаю каталоги проекта:
mkdir -p ~/Projects/CodeQualityAnalysis/sonarqube-docker/extensions/plugins mkdir -p ~/Projects/CodeQualityAnalysis/ConfigurationFiles
Установка Docker
Если Docker уже установлен, этот шаг можно пропустить
Разработчики Docker предлагают универсальный сценарий установки, где нужно скачать скрипт, выполнить, затем выдать права пользователю.
Временные файлы после работы нужно удалить, сохраняем порядок!
# Устанавливаю Docker curl -fsSL https://get.docker.com -o /tmp/get-docker.sh sudo sh /tmp/get-docker.sh rm /tmp/get-docker.sh # Добавляю пользователя в группу docker и применяем изменения sudo usermod -aG docker $USER newgrp docker # Проверяю результат установки docker --version docker compose version
Подготовка и развертывание контейнеров
Настройка docker-compose.yml
Создаю файл ~/Projects/CodeQualityAnalysis/sonarqube-docker/docker-compose.yml с содержимым:
services:
sonarqube:
image: sonarqube:community
container_name: sonarqube
hostname: sonarqube
restart: unless-stopped
ports:
- "9000:9000"
environment:
- SONAR_JDBC_URL=jdbc:postgresql://sonarqube-db:5432/sonarqube
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=ПарольОтPostgreSQL
- SONAR_SEARCH_JAVAOPTS=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
- SONAR_WEB_JAVAOPTS=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
- SONAR_CE_JAVAOPTS=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
volumes:
- ./extensions/plugins:/opt/sonarqube/extensions/plugins
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
depends_on:
sonarqube-db:
condition: service_healthy
ulimits:
nofile:
soft: 131072
hard: 131072
nproc:
soft: 8192
hard: 8192
memlock:
soft: -1
hard: -1
sonarqube-db:
image: postgres:15-alpine
container_name: sonarqube-db
restart: unless-stopped
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=ПарольОтPostgreSQL
- POSTGRES_DB=sonarqube
volumes:
- postgresql_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sonar -d sonarqube"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql_data: Пароль ПарольОтPostgreSQL используется в двух местах. При смене пароля меняйте одновременно.
Подготовка плагинов 1C (BSL) и Русского я зыка
Предварительно выясняю ссылки на актуальные версии плагинов на GitHub: SonarQube 1C (BSL) Community Plugin и SonarQube Russian Language Pack. Скачиваю их в каталог с плагинами
cd ~/Projects/CodeQualityAnalysis/sonarqube-docker # Скачиваю плагин для анализа 1C (BSL) wget -P ./extensions/plugins/ \ https://github.com/1c-syntax/sonar-bsl-plugin-community/releases/download/v1.15.0/sonar-communitybsl-plugin-1.15.0.jar # Скачиваю плагин Русского языка wget -P ./extensions/plugins/ \ https://github.com/1c-syntax/sonar-l10n-ru/releases/download/v25.7/sonar-l10n-ru-plugin-25.7.jar
Запуск SonarQube
Перехожу в каталог с файлом docker-compose.yml и запускаю контейнеры:
cd ~/Projects/CodeQualityAnalysis/sonarqube-docker docker compose up -d
При первом запуске контролирую готовность:
docker compose logs -f
Дожидаюсь строки SonarQube is operational. Теперь можно переходить в веб-интерфейс.
Первый вход и настройка
Веб-интерфейс расположен по адресу http://localhost:9000. Если установка производится на удаленной машине без графического окружения, подключаюсь по IP-адресу.
Веб интерфейс приветствует формой авторизации. По умолчанию логин: admin, пароль: admin.
После авторизации будет предложено сменить пароль. Затем появится предупреждение для подтверждения установки плагинов.
Проверяю установленные плагины. Перехожу Administration → Marketplace → Installed или Администрирование → Магазин → Установлено, вижу установленные плагины.
Установка выполнена успешно, идем дальше.
Скрипт для запуска анализа качества кода
Пишу скрипт, который запустит контейнер SonarScanner в Docker и выполнит анализ указанного проекта. Если проект не указан, выведет подсказку и список доступных проектов. Если проект найден, выводится сообщение о начале анализа, а после о завершении.
Скрипт расположен в файле ~/Projects/CodeQualityAnalysis/scan.sh
#!/bin/bash
# Корень проектов
BASE_PATH="$HOME/Projects/CodeQualityAnalysis/ConfigurationFiles"
# Имя проекта (обязательный аргумент)
PROJECT="${1}"
if [ -z "$PROJECT" ]; then
echo "Ошибка: укажите имя проекта"
echo "Использование: $0 <имя_проекта>"
echo "Доступные проекты:"
ls -d ${BASE_PATH}/*/ 2>/dev/null | xargs -n1 basename
exit 1
fi
PROJECT_PATH="${BASE_PATH}/${PROJECT}"
if [ ! -d "$PROJECT_PATH" ]; then
echo "Ошибка: проект '$PROJECT' не найден в $BASE_PATH"
echo "Доступные проекты:"
ls -d ${BASE_PATH}/*/ 2>/dev/null | xargs -n1 basename
exit 1
fi
echo "============================================"
echo "Запуск анализа проекта: $PROJECT"
echo "Путь: $PROJECT_PATH"
echo "============================================"
# Запуск SonarScanner в Docker
docker run --rm \
--network="host" \
-v "${PROJECT_PATH}:/usr/src" \
sonarsource/sonar-scanner-cli
echo "============================================"
echo "Анализ завершён!"
echo "Результат: http://localhost:9000/dashboard?id=${PROJECT}"
echo "============================================"
Делаю скрипт исполняемым
chmod +x ~/Projects/CodeQualityAnalysis/scan.sh
Все готово для добавления первого проекта и его анализа
Добавление проекта для анализа
Каталоги и настройки проекта
Рекурсивно создаю каталог проекта:
mkdir -p ~/Projects/CodeQualityAnalysis/ConfigurationFiles/ИмяПроекта/src
Далее по тексту буду использовать ИмяПроекта, замени на имя твоего проекта
Создаю файл настроек ~/Projects/CodeQualityAnalysis/ConfigurationFiles/ИмяПроекта/sonar-project.properties с содержимым:
# Основные настройки sonar.projectKey=ИмяПроекта sonar.projectName=ИмяПроекта sonar.projectVersion=1.0 # Язык и кодировка sonar.language=bsl sonar.sourceEncoding=UTF-8 # Пути к исходникам sonar.sources=src # Настройки BSL sonar.bsl.language-server.enabled=true sonar.bsl.language-server.diagnostic-language=ru # Анализировать только .bsl и .os файлы sonar.inclusions=**/*.bsl, **/*.os # Исключить только служебные файлы конфигурации sonar.exclusions=**/*.cf, **/*.epf, **/*.bin, **/*.png, **/*.jpg, **/*.form, **/*.xml, **/*.mdo, **/ConfigDumpInfo.xml, **/Configuration.xml # Токен доступа (замени на свой) sonar.token=ТокенДоступаКПроекту
Токен доступа для сканера
Можно использовать один токен и вынести его в скрипт scan.sh, но для себя использую новый токен в каждом проекте.
Перехожу в веб-интерфейс SonarQube, в правом верхнем углу нажимаю на иконку пользователя и перехожу в меню Мой аккаунт → Безопасность. Указываю имя, тип токена, срок и нажимаю Сгенерировать. Копирую токен и указываю его в файле настроек проекта вместо ТокенДоступаКПроекту и сохраняю в файл.
Копирую файлы проекта для анализа в каталог ~/Projects/CodeQualityAnalysis/ConfigurationFiles/ИмяПроекта/src
Запуск анализа проекта
Для запуска анализа выполняю скрипт scan.sh с именем проекта:
~/Projects/CodeQualityAnalysis/scan.sh ИмяПроекта
Если не передать имя проекта, будет выведена ошибка и список доступных проектов:
~/Projects/CodeQualityAnalysis/scan.sh Ошибка: укажите имя проекта Использование: /home/guesto/Projects/CodeQualityAnalysis/scan.sh <имя_проекта> Доступные проекты: ИмяПроекта
При успешном запуске вывод консоли будет таким:
~/Projects/CodeQualityAnalysis/scan.sh TestProject ============================================ Запуск анализа проекта: TestProject Путь: /home/guesto/Projects/CodeQualityAnalysis/ConfigurationFiles/TestProject ============================================ 04:49:55.351 INFO Scanner configuration file: /opt/sonar-scanner/conf/sonar-scanner.properties 04:49:55.358 INFO Project root configuration file: /usr/src/sonar-project.properties 04:49:55.378 INFO SonarScanner CLI 8.0.1.6346 04:49:55.385 INFO Linux 6.17.0-29-generic amd64 ... 04:50:08.322 INFO Analysis total time: 7.327 s 04:50:08.323 INFO SonarScanner Engine completed successfully 04:50:08.414 INFO EXECUTION SUCCESS 04:50:08.415 INFO Total time: 13.070s ============================================ Анализ завершён! Результат: http://localhost:9000/dashboard?id=TestProject ============================================
Перехожу по ссылке и проверяю результат анализа, после исправления замечаний в коде, повторяю выгрузку исходного кода и запускаю повторный анализ.
Все операции занимают несколько минут. Добавление нового проекта сводится к созданию пары каталогов, файла настроек и копированию исходников.




