Как упростить подготовку конфигурации для работы с Git и SonarQube

02.07.24

Разработка - Групповая разработка (Git, хранилище)

Скрипт для работы с SonarQube и локальным репозиторием Git.
Цель проекта – возможность выполнить быструю проверку качества кода перед тем, как помещать доработки в рабочее хранилище. В Sonar и Git выгружается не вся конфигурация, а только объекты из заданного списка.
https://github.com/vkrivov/go/

Про 1С, Git и SonarQube

Во-первых, по нынешним временам для работы с 1С используется не только 1С. Есть большое количество инструментов, которые применяются на всех стадиях разработки. В данном случае остановимся на Git и SonarQube.

Во-вторых, когда разработчик выполняет какую-то задачу – и даже неважно, типовая конфигурация или нет – он ведь не правит всю конфигурацию вообще. Модуль объекта, какая-то форма объекта. Или расширение. Или это могут быть вообще внешние обработки (отчёты).

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

 

Цель проекта

Имеется список объектов конфигурации. Данный список разработчик составляет вручную в соответствии с выполняемыми задачами. Список задаётся в текстовом формате в наглядной форме. Пример списка:

Каталог: Тестовая база УТ
Строка соединения: File="C:\Dev\UT"; Usr="Admin"; Pwd="Admin"
[
ОбщийМодуль.CRMЛокализация
Документ.АвансовыйОтчет
Документ.АвансовыйОтчет.Форма.ФормаДокумента
Справочник.Номенклатура
Справочник.Номенклатура.Форма.ФормаСписка
C:\Разработка\Печать реестра.epf
]

Далее вручную или по расписанию запускается скрипт, который на основании списка формирует командную строку запуска конфигуратора. Конфигуратор выгружает объекты из списка в файлы. Для этих файлов делается git add и commt и запускается sonar-scaner.

Итак, цель проекта – выполнить быструю проверку качества кода перед тем, как помещать доработки в хранилище. В этой связи используется только локальный репозиторий, push в публичный репозиторий не делается.

 

Теперь подробнее

Изначально проект состоит из четырёх файлов:

 

 

go.os – собственно скрипт;
init.os – скрипт, который подготавливает необходимую структуру каталогов и создаёт локальный репозиторий git;
настройки.ini – настройки системы (пути к 1С и Sonar, токен Sonar и т. п.);
список объектов.ini – список объектов, которые требуется выгрузить.

 

Установка

Страница проекта на GitHab
https://github.com/vkrivov/go/

Распаковать файлы в нужный каталог. Название и расположение каталога произвольные. После этого выполнить  в этом каталоге команду oscript init.os:

 

 

В результате каталог будет выглядеть следующим образом:

 

 

Назначение созданных каталогов:
git – здесь находится локальный репозиторий;
sonar – здесь (будут) находятся файлы, предназначенные для Sonar.

Файл sonar-project.properties не используется. Вместо этого все параметры передаются сканеру в командной строке.

 

Настройка

Настройки задаются в двух файлах: настройки.ini и список объектов.ini; в файле настройки.ini описаны свойства системы вообще. Пример:

# Исполняемый файл 1С:Предприятия
ПлатформаПолныйПуть: C:\Program Files (x86)\1cv8\8.3.15.1830\bin\1cv8.exe*

# SonarScanner - файл запуска сканера, "sonar-scanner" для Linux, "sonar-scanner.bat" для Windows
# Если путь к сканеру не указан в PATH, нужно указать полный путь к файлу
SonarScanner: C:\Sonar\sonar-scanner\bin\sonar-scanner.bat*
SonarProjectKey: xxx**
SonarSources: .
SonarHostURL: http://localhost:9000***
SonarToken: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx**

* – приводятся исключительно для примера, пути необходимо заменить на реальные
** – определяются при настройке SonarQube
*** – адрес сервера SonarQube, localhost говорит о том, что сервер и сканер установлены на одной машине

В файле список объектов.ini указывается список необходимых объектов для каждой конкретной базы. Пример:
Каталог: Тестовая база*
Строка соединения: File="C:\Dev\UT"; Usr="Admin"; Pwd="1"***
[**
ОбщийМодуль.CRMЛокализация
Документ.АвансовыйОтчет
Документ.АвансовыйОтчет.Форма.ФормаДокумента
Справочник.Номенклатура
Справочник.Номенклатура.Форма.ФормаСписка
C:\Разработка\Печать реестра.epf
]**

* – название каталога, в который будут выгружаться файлы конфигурации, поэтому оно должно быть корректным с точки зрения файловой системы
** – начало и конец блока, в котором перечислены объекты конфигурации
*** – по крайней мере на Linux пакетный режим работает плохо в том случае, если база файловая и в пути содержатся кириллические символы.

Количество баз в файле настроек неограниченно.

 

Как пользоваться

Нужно выполнить команду
oscript go.os "...Комментарий к коммиту…"
либо, если комментарий не нужен (nc – no comments)
oscript go.os -nc

 

Важно

Скрипт написан на OneScript, предполагается, что в системе уже установлены и настроены:
OneScript, https://oscript.io/
Git, https://git-scm.com/
Sonar, https://www.sonarsource.com/

 

На всякий случай

Sonar – штука, мягко говоря, непростая. Мощная, скурпулёзная, но непростая. Во всём. И в установке тоже. В частности, с офф. сайта иногда пропадают ссылки на сканеры. На момент написания статьи они появились, но осадок остался. Подсказка, как решить проблему, нашлась на Медиуме (Статья, кстати, не о совсем сканере, а о том, как установить Сонар из Докера. Полюбопытствуйте. Прикольно.):
https://medium.com/@ayoubchamchi/sonarqube-sonarscanner-8bec4711e482

Смысл в том, что, оказывается, у Сонара есть место, где лежит всё, что можно скачать:
https://binaries.sonarsource.com/

 

Скачать

Страница проекта на GitHab:
https://github.com/vkrivov/go/

Скрипт OneScript Git SonarQube

См. также

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Программист Стажер Платформа 1С v8.3 Платные (руб)

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 руб.

29.06.2022    12510    106    4    

138

OneScript Программист Бесплатно (free)

Вместе создадим библиотеку на Oscript с нуля, шаг за шагом: от базовой структуры проекта до перевода на ОСень. Разберем структуру проекта, работу с файлом конфигурации, логирование, уведомления, консольный интерфейс и многое другое. Освоим весь цикл разработки и сделаем первый шаг к созданию собственных инструментов на Oscript!

13.01.2025    1727    leobrn    8    

54

OneScript Программист Платформа 1С v8.3 Бесплатно (free)

Если вы, так же как и я, давно хотели попробовать сделать что-то свое на OneScript, но никак не могли к нему подступиться, то, возможно, эта статья пригодится вам в качестве некоего вводного материала.

10.01.2025    1607    KamranV21    12    

35

OneScript Программист Бесплатно (free)

В мире OneScript давно существуют библиотеки для облегчения работы с каким-либо классом программного обеспечения, например v8runner - помощник выполнения команд конфигуратора или gitrunner - программная обертка для запуска команд git. Есть библиотека и для работы с автономным сервером 1с. Однако библиотеке ibcmdrunner уже три года, а про нее нет ни одной публикации на инфостарте. Исправляю эту несправедливость.

09.01.2025    1163    ardn    0    

22

OneScript Программист Бесплатно (free)

Отгремел Infostart Tech Event 2024, топовое событие в мире 1С-разработки, традиционно проходящее в Санкт-Петербурге. Ваш покорный слуга в этот раз отмечал там 10-летний юбилей проекта OneScript. Отмечание проводилось в форме игры-соревнования по забегу роботов в лабиринте. Участники пытались написать алгоритм движения робота на языке 1С и сделать это быстрее других. О том, как это было – под катом.

28.10.2024    1673    Evil Beaver    11    

25

OneScript Программист Бесплатно (free)

OneScript – это скриптовый движок для автоматизации всего и вся. О том, как OneScript помогает в разработке скриптов на языке 1С, пойдет речь в статье.

10.10.2024    3681    ardn    2    

9

Групповая разработка (Git, хранилище) Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда в хранилище одновременно разрабатывают несколько команд, сортировка сделанного и несделанного при формировании релиза и проведение code review по задачам превращаются в непроходимый квест. В таких случаях нужен бранчинг. Расскажем об опыте перехода на новую схему хранения кода для ИТ-департамента.

23.09.2024    4466    kraynev-navi    3    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SAShikutkin 15 03.07.24 09:51 Сейчас в теме
Так если это нужно разработчику, проще использовать феникс (https://github.com/otymko/phoenixbsl), и не нужно ждать пока Sonar обработает изменения. (P.S. да правил меньше, но 80% ошибок им перекрывается).
comptr; sleemp; +2 Ответить
2. sleemp 8 05.07.24 12:47 Сейчас в теме
Не совсем понял профит от этого решения.

Результат проверки куска конфигурации скорее всего будет некорректным. Как минимум получим вагон ошибок обращения к несуществующим метаданным.

Как написали в (1), феникс решит задачу предварительного быстрого анализа. А раз уж мы развернули сонар, то проще отгружать в него всю конфигурацию целиком, а исключение объектов не затронутых разработчиком решить через отключение проверки объектов на поддержке и механизм сонара со сравнением с предыдущей версией кода (а тут уже широкий простор для настроек, можно через запросы на слияние пойти, можно предыдущий код в ветке отдельной сохранить, можно по количеству дней отсекать старый код)
comptr; nixel; +2 Ответить
3. nixel 1440 05.07.24 16:46 Сейчас в теме
(2) как раз хотел написать, что при частичной выгрузке конфигурации у сонар-сканнера будет минимум контекста об окружении, и часть проверок, которые опираются на тип модуля или обращения к другим модулям работать не будут.

разве что нужно не забыть фениксу переодически новую версию бсл лс подкладывать.
4. Kyrales 145 06.07.24 13:28 Сейчас в теме
(3) новые версии BSL не работают на фениксе
5. nixel 1440 06.07.24 13:35 Сейчас в теме
(4) а можно подробности? Выдаётся какая-то ошибка или что? API сервера не менялся за эти годы.
7. Kyrales 145 10.07.24 16:15 Сейчас в теме
(5) на 0.20 BSL работает, а на 0.23 нет. Скриншот приложил
Прикрепленные файлы:
8. Kyrales 145 10.07.24 16:58 Сейчас в теме
(5)
(6)
(7)
Все вопрос снимаю. Разобрался. Скачивал только jar файл для замены. А надо было весь bsl-language-server_win.zip . Работает :)
6. sleemp 8 08.07.24 12:38 Сейчас в теме
(4) проверил. работает.
Прикрепленные файлы:
Оставьте свое сообщение