- SonarQube 7.9 и выше
- Плаформа 1С 8.3.10 и выше
- 1С: АПК 1.2.3.20
- Установленный плагин для SonarQube https://github.com/1c-syntax/sonar-bsl-plugin-community
- Установленный Sonar Scanner https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
- Выполняем проверку конфигурации через 1С: АПК. Проверку можно выполнить и из обработки.
- Создаем каталог проекта для Sonar. Из каталога Sample копируем файл с настройками sonar-scaner sonar-project.properties. В файле меняем настройки:
- sonar.host.url - адрес сервера SonarQube
- sonar.projectKey - ключ проекта в SonarQube
- Выгружаем в папку src в каталоге проекта файлы конфигурации (можно сделать из конфигуратора 1С)
- Если используются обычные формы, нужно извлечь form.bin. Для этого в каталог проекта копируем и
tools/run.os
. Запускаем выполнение скрипта в каталоге проектаoscript run.os
. - Из конфигурации 1С: АПК запускаем обработку
acc-export.epf
. Заполняем реквизиты: "конфигурация", "каталог проекта". Нажимаем "Выполнить". - Получаем результаты проверки bsl-language-server. Прочитать можно по ссылке https://github.com/1c-syntax/bsl-language-server.
- Запускаем sonar-scanner.
Пример скрипта для пунктов 6 и 7. Используем версию bsl-language-server-0.4.0 Скрипт:
java -jar \path\to\file\bsl-language-server-0.3.0.jar --analyze --srcDir ./src --reporter json
\path\to\file\sonar-scanner.bat -X -D"sonar.login=687caef36034bdf6b1e535fa8f060c518739958d"
Параметры пакетного режима
acc.propertiesPaths
- строка. Путь к файлу настроек.acc.check
- булево. Запустить проверку конфигурации. Ложь, если нужно выгрузить ошибки существующей проверки.acc.recreateProject
- булево. Пересоздать конфигурацию проверки. АПК кеширует часть ошибок и при перепроверке они все равно отображаются, даже если были исправлены. Установленный флаг создает новую конфигурацию и запускает ее проверку с нуля.acc.projectKey
- строка. Наименование конфигурации в АПК.acc.catalog
- строка. Каталог проекта (не к src)acc.sources
- строка. Путь / каталог исходных кодов, напримерsrc
.acc.format
- строка. Формат экспорта из АПК (reportjson или genericissue). По-умолчанию reportjson. Можно не указывать.acc.titleError
- строка. Представление вывода ошибки при экспорте. Может принимать значения:code
(только код ошибки),name
(только наименование ошибки),codeName
(код и наименование ошибки). По-умолчаниюcodeName
.acc.result
- строка. Путь к файлу результату. По умолчанию, КаталогПроекта/acc-generic-issue.json для формата GenericIssue или КаталогПроекта/acc-json.json для reportjson.acc.objectErrors
- булево. Выгружать ошибки объектов, которые не привязаны к модулю. Например, ошибки в ролях или орфография в элементах формы. Ошибки будут привязаны к первой строке модуля объекта, модуля менеджера или модуля приложения.acc.fileClassificationError
- строка. Путь к файлу, содержащему настройки серьезности и типов ошибок АПК для SonarQube. Также для ошибок можно задать время, необходимое для их исправления. Сам файл настроек можно сгенерировать из обработкиacc-export.epf
, перейдя на форму настроек по кнопкеКлассификация ошибок
.
Параметры можно передать через файл настроек acc.properties или через параметры запуска. Приоритет у параметров запуска.
Для использования формата generic issue при загрузке отчетов через sonar scanner нужно в конфигурационном файле sonar-project.properties
указать свойство sonar.externalIssuesReportPaths=acc-generic-issue.json
.
Пример скрипта запуска
@chcp 65001
@set RUNNER_IBNAME=/FC:\Sonar\acc
@set RUNNER_DBUSER=Администратор
@call runner run --command "acc.propertiesPaths=C:\Sonar\sample\acc.properties;" --execute "C:\Sonar\acc-export.epf" --ordinaryapp=1
Пример шага из jenkinsfile
script {
def cmd_properties = "\"acc.propertiesPaths=${ACC_PROPERTIES};acc.catalog=${CURRENT_CATALOG};acc.sources=${SRC};acc.result=${TEMP_CATALOG}\\acc.json;acc.projectKey=${PROJECT_KEY};acc.check=${ACC_check};acc.recreateProject=${ACC_recreateProject}\""
cmd("runner run --ibconnection /F${ACC_BASE} --db-user ${ACC_USER} --command ${cmd_properties} --execute \"${BIN_CATALOG}acc-export.epf\" --ordinaryapp=1")
}
P.S. Если скрипт не ожидает выполнения сеанса 1С, то скорее всего нужно добавить параметр с нужной версией платформы. Например:
...
@call runner run --v8version "8.3.10.2772" --command "acc.propertiesPaths=C:\Sonar\sample\acc.properties;" --execute "C:\Sonar\acc-export.epf" --ordinaryapp=1
Для замены одиночных CR можно использовать скрипт tools/updatecr.os. Копируем этот скрипт в каталог с проектом. Например: /sample/updatecr.os
. Далее в консоли выполняем команду в каталоге с проектом:
oscript updatecr.os
Для запуска обработки в пользовательском режиме 1С, нужно в параметрах сеанса указать параметр запуска \Debug
(например через конфигуратор Сервис - Параметры - Запуск 1С: Предприятия - Основные и заполнить поле Параметр запуска).
Вы можете столкнуться с проблемами исходных кодов конфигурации 1C. Например, в файле модуля могут использоваться одновременно окончания строк LFCR и/или LF(Linux) и\или CR(MacOS). Эту проблему можно исправить, используя Notepad++. Ищем в каталоге src по регулярной строке (\r)[^\n]
и меняем на \r\n (LFCR).
Для выгрузки описаний правил проверки АПК в файл формата JSON реализована обработка rules-export.epf
. Выгрузка возможно в двух режимах: ручной или через пакетный запуск.
Открываем обработку rules-export.epf
в пользовательноском режиме 1С, указываем в поле Путь к файлу выгрузки
путь к сохраняемому файлу json и нажимаем Выполнить
.
Создаем файл bat с содержимым:
@chcp 65001
@set RUNNER_IBNAME=/FC:\Sonar\acc
@set RUNNER_DBUSER=Администратор
@call runner run --v8version "8.3.10.2772" --command "acc.rulesExportPath=path\to\rules-export.json;" --execute "C:\Sonar\rules-export.epf" --ordinaryapp=1
где:
path\to\rules-export.json
- путь к файлу выгрузки описаний правил