Автоматическое тестирование кода в большом программировании процесс довольно типичный и фактически уже обязательный в командах, которые следят за качеством кода.
в мире 1С, тестирование кода тоже не новый процесс, мало того 1С разработало свой инструмент для тестирования, но сегодня не о нем. Сегодня рассмотрим систему автоматического тестирования кода SonarQube, которая традиционно вписывается в технологию групповой разработки CI\CD.
SonarQube можно использовать как в комплексе с другими системам CI\CD так и отдельно.
Итак приступим к развертыванию SonarQube:
1. JAVA в первую очередь нам потребуется Java, подойдет OpenJDK 17-й версии, которую можно скачать по этой ссылке, содержимое архива я копирую в корень диска C для наглядности:
C:\jdk-17.0.2
Дополнительно сразу необходимо создать переменную среды именно для SonarQube, имя переменной
SONAR_JAVA_PATH
*Отдельно надо сказать у меня в системе уже установлена другая версия Java для 1С:EDT, поэтому такое разделение даже удобно (для другой версии Java указана переменная среды JAVA_HOME).
2. SonarQube, после установки Java можно приступать к установке SonarQube, для этого потребуется скачать SonarQube community edition 10.06 (на момент написания статьи это стабильная, актуальная версия).
После скачивания, распакуйте содержимое архива (я как правило подобные инструменты распаковываю в корень основного диска для простоты дальнейшего поиска в случае если необходимо что-то поправить в конфигурационные файлы).
Таким образом папка с SonarQube у меня располагается по следующему пути:
C:\sonarqube-10.6.0.92116
Следующим шагом необходимо сконфигурировать основные настройки, которые находятся в папке conf, в файле sonar.properties
C:\sonarqube-10.6.0.92116\conf\sonar.properties
В массе различных статей рекомендуют сразу же корректировать настройка связанные с управлением памятью, прежде, чем это делать следует почитать документацию на этом сайте, связано это в основном с тем, что под различные 1С конфигурации подойдут соответствующие настройки (ссылка на документация по выделению памяти) в ткущей настройке я оставлю опции по умолчанию, но для примера приведу настройка, которые у меня установлены для ЕРП УХ 3.1:
sonar.web.javaOpts=-server -Xmx2g -Xms1g -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts=-Xmx6g -Xms4g -XX:+HeapDumpOnOutOfMemoryError
sonar.search.javaOpts=-Xmx6g -Xms6g -XX:+HeapDumpOnOutOfMemoryError
Если в первом пункте настройка Java выполнена корректно, можно приступать к запуску (запускать как вы поняли из 1-го пункта мы будем под Windows), запустить SonarQube можно как сервис и как экземпляр, в статье я буду выполнять запуск экземпляра, для этого необходимо выполнить запуск следующего файла:
C:\sonarqube-10.6.0.92116\bin\windows-x86-64\StartSonar.bat
При успешном запуске в консоли вы увидите следующее сообщение:
По умолчанию в настройках SonaQube адрес сервера localhost, порт 9000, открываем в браузере WEB интерфейс по следующему адресу:
http://localhost:9000
Для авторизации по умолчанию необходимо использовать имя admin, пароль admin, после авторизации система предложит сменить пароль по для учетной записи admin.
После выполнения 2-го пункта считаем, что базовый функционал SonarQube настроен, но это конечно еще не позволит выполнить задачу по сканированию нашего исходного кода. Поэтому идем дальше.
3. SonarQube 1C (BSL) Community Plugin, для того, чтобы SonarQube мог анализировать исходные коды 1С, потребуется установить соответствующий плагин.
Установить плагин можно в WEB интерфейсе SonarQube, как показано на рисунке:
После установки потребуется перезапустить сервер:
После перезапуска SonarQube, плагин должен быть установлен, напротив плагина будет статус "Installed".
4.Токен, уникальный авторизационный код, который обязательно должен быть указан при запуске инструментов сканирования (sonar scanner). Создать его можно так же через WEB интерфейс SonarQube в меню "Administration-Security-Users", для примера можно выбрать пользователя Администратор (в рабочем сервере конечно необходимо использовать выделенного пользователя для этих целей) и создать Токен:
Генерируем токен:
Токен сформирован, теперь можно приступать настройке инструмента сканирования и подготовке исходных кодов.
5.SonarScanner, утилита, которая непосредственно выполняет сканирование ваших исходных кодов, запускается для сканирования. Для установки ее необходимо скачать по следующей ссылке, утилит для сканирование на самом деле несколько, но мы будем использовать подходящий для примера и для кейсов, когда ваш код лежит на локальном Git репозитории например.
Скачанный файл
sonar-scanner-cli-6.1.0.4477-windows-x64.zip
распаковываю в каталог
C:\sonar-scanner-6.1.0.4477-windows-x64
На этом установка SonarScanner завершена.
6.Подготовка исходных кодов и запуска санирования, суть подготовки исходных кодов для сканирования сводится к двум этапам:
- Выгрузка конфигурации в файлы (и не только в XML по факту, модули выгружаются в файлы с расширением bsl)
- Настройка параметров сканирования для проекта
6.1 Выгрузка конфигурации в файлы, конфигурацию можно выгрузить в файлы через стандартную процедуру, доступную в конфигураторе. Для этого необходимо открыть конфигурацию в конфигураторе и следующие действия:
затем, выполнить выгрузку
В результате выгрузки будет создана структура файлов и папок следующего вида:
Отмечу, что моя конфигурация для примера располагается в другом пути, так как я использую 1С:EDT (выгрузка в файлы в этой среде выполнятся в процессе создания проекта). Поэтому далее в примере путь к проекту и исходным кодам будет такой:
C:\git\_1C_Upravlenie_activami\01Управление_активами\src
6.2 Настройка параметров сканирования для проекта
В каталоге
C:\git\_1C_Upravlenie_activami\01Управление_активами
необходимо создать два файла:
1. Исполняемый bat файл для запуска санирования, со следующим содержанием
C:\sonar-scanner-6.1.0.4477-windows-x64\bin\sonar-scanner.bat -D"sonar.token=squ_97f5b8c61a0943aaef06b52beecb55c402cee2d3"
Путь и токен должен быть указан исходя из ваших настроек.
2. файл с настройками сканирования вашего проекта
имя файла:
sonar-project.properties
содержание файла:
# адрес сервера SonarQube
sonar.host.url=http://localhost:9000
# ключ проекта
sonar.projectKey=1C_Upravlenie_activami
# имя проекта
sonar.projectName=1C_Upravlenie_activami
# версия проекта
sonar.projectVersion=1.0
# относительный или абсолютный путь к каталогу с исходными кодом
sonar.sources=src
# маска поиска файлов на проверку
sonar.inclusions=**/*.bsl,**/*.os,**/*.xml
sonar.exclusions=**/*.html,**/Ext/Help.xml,**/Ext/Template.xml,**/Templates/**/*.xml,**/Ext/Predefined.xml,**/Ext/Picture.xml,**/Ext/Flowchart.xml,ExternalDataSources/**/Content.xml,ExchangePlans/**/Content.xml
sonar.lang.patterns.xml=**/*.xsd,**/*.xsl
# Пропускать файлы на полной поддержке поставщика, со статусом ""Не редактируется""
sonar.bsl.languageserver.skipSupport=with support locked
# Глубина поиска файлов описаний корней конфигураций проекта (файлы Configuration.xml и Configuration.mdo) относительно файла sonar-project.properties
sonar.bsl.maxDepthSearchConfiguration=4
# Файлы замечаний от внешних инструментов (в формате json)- 1C:EDT и т.п.
sonar.bsl.acc.externalRulesPath=./edt-validate.json,./acc.json
# Файл замечаний от внешних инструментов (в формате xml) от 1C:АПК
sonar.bsl.acc.resultsPath=./acc.xml
# игнорирование gitignore
sonar.scm.exclusions.disabled=true
в результате в вашем каталоге с проектом будет содержаться два новых только что сформированных файла
7.Запуск скаинования и анализ результатов, для запуска сканирования необходимо запустить файл:
run-scanner.bat
В результате успешного сканирования будет сформировано следующее сообщение:
Оценить результат сканирования можно в непосредственно в WEB интерфейсе SonarQube, проект будет сформирован автоматически.
Разбор непосредственно правил анализа я пока оставлю за рамками данной статью, так как это больше относится к методологии проверки кода, она для каждой компании может быть исходя из специфики.
Таким образом такой инструмент как SonarQube может быть встроен схему CI\CD, либо использоваться как отдельная регулярная проверка.