Добрый день, хабровчане!
Меня зовут Михаил Галац, за моими плечами насыщенный опыт в IT. Сейчас я руковожу Ресурсным центром и веду проекты по 1С.
В начале введу вас немного в контекст и расскажу, как появилась идея о написании этой статьи-инструкции.
Я хочу поделиться личным опытом, как развернул с нуля автоматизированное тестирование кода в одном из направлений компании, конечно, не без помощи комьюнити SonarQube_1C_APK и рекомендаций от Никиты Федькина и Олега Тымко.
Наше направление «Спрайдев» (ГК «Автомакон») специализируется на внедрении проектов 1С от внедрения масштабных решений, например, WMS и ERP. Как и многие другие стараемся повышать свою конкурентную позицию на рынке. При этом важно же не только расти, но и качественно расти. Любому инженеру следует быть в курсе и пользоваться техническими новшествами и фичами. Например, необходимо контролировать качество кода 1С в соответствии со стандартами от 1С. Автоматизированная проверка кода позволяет ускорить процесс тестирования и повысить его качество, повысить уровень команды разработчиков, избежав ошибок, которые могут быть допущены при ручном тестировании, и освобождает ведущего программиста от этой рутины. Именно поэтому я решил организовать автоматизированную проверку кода в наших проектах. Перед этим я много времени уделил изучению матчасти, подробнее с источниками вы можете ознакомиться в разделе «Список источников» в конце статьи.
Бывает же вот так, знаешь теорию, а как это применить на практике — нет.
Статья будет полезна как начинающим автотестерам, так и всем, кто хочет привести в порядок работу над проектами. Если в вашей компании или направлении еще не запущен процесс автоматизации проверки кода, но у вас есть желание и возможность его внедрить, с помощью этой подробной инструкции у вас получится сделать это быстро и без проблем.
Дисклеймер: Я осознанно написал эту инструкцию упрощенно и максимально подробно, чтобы ваша «хотелка» запустить автоматизированный конвейер проверки кода не исчезла при малейшей трудности на пути.
Уверен, в будущем для подключения нового проекта я и сам буду обращаться к этой инструкции и делиться ею с коллегами, а пока делюсь с вами, читатели Хабра. Надеюсь, и вам поможет этот алгоритм действий.
Я использовал свой собственный опыт для написания этой статьи, если вам есть, что дополнить, пишите в комментариях. Буду рад обсудить вопросы и предложения.
Как внедрить автоматизированное тестирование
Прежде всего необходимо убедить ваше руководство в необходимости использовать автоматизированную проверку кода и выделить достаточно времени, не менее 40 часов, чтобы все успеть. Важно понимать, что придется обучить свою команду и постепенно начинать использовать SonarQube, выработать свои правила внутри команды и это тоже время. У вас точно будут возникать спорные моменты, поэтому рекомендую предварительно обсудить и принять коллегиально решение, иначе ничего «не полетит» и будет все делаться из-под палки, а это путь в никуда.
Содержание инструкции:
Установка OneScript
Установка JDK
SonarQube
Установка SonarQube
Настройка SonarQube
Установка PostgreSQL
Настройка Elasticsearch
Настройка Web server
Настройка SonarQube
Первый запуск SonarQube (проверка)
GitLab
Установка GitLab
Настройка отправки почты из GitLab
Sonar Scanner
Установка Sonar Scanner
Настройка Sonar Scanner
Формирование git-репозитория из вашего хранилища 1С
Установка Git CLI
Создание репозитория из шаблона vanessa-bootstrap
Установка и настройка GitSync
Инициализация GitSync
Использование АПК в проверке кода
Список источников
Почему Gitlab
Сразу хочу пояснить, почему мой выбор пал на Gitlab:
Standalone.
Free. Мы используем бесплатную версию и этого пока достаточно.
Возможность размещать свои репозитории и сборочную линию в одном продукте.
В конфиге для сборочной линии кириллицу не нужно переводить в юникод. В .gitlab.yml можно использовать кириллицу.
Репозиторий и CI/CD в одном флаконе.
Давайте посмотрим как будет выглядеть настройка в новом проекте.
Для удобства все использованные программные продукты (дистрибутивы и конфигурации) можно скачать отсюда. Перед запуском на новых версиях, обязательно посмотрите требования SonarQube.
Установка OneScript
Скачиваем и устанавливаем сам OneScript. Для прода выбирайте версию LTS;
Обновляем все библиотеки. Команда: opm update НазваниеБиблиотеки;
Вступаем в канал ТГ разработчика OneScript;
Установка JDK
Рекомендую использовать бесплатный вариант OpenJDK. 24 июля 2022 года произошел ребрендинг и теперь этот продукт называется «AdoptOpenJDK». Скачать уже openjdk можно с этой страницы.
Да, вы можете использовать и от Oracle, но работая в коммерческой организации, вы будете нарушать лицензионное соглашение, а оно вам надо?
Актуальная версия на 29 декабря 2022 года: jdk-17.0.5+8
У меня установился в каталог c:\Program Files\Eclipse Adoptium\. При установке выбираем установку переменной JAVA_HOME.
После установки проверяем, установился или нет:
cmd
java -version
Если все в порядке, то увидим версию Java.
Если будет ошибка, то можно проверить значение переменной Path. Нужно обращать на требование SonarQube. Здесь об этом подробнее при выборе версии JDK.
SonarQube
Установка SonarQube
Для установки SonarQube обращаемся к официальной странице помощи. Версии меняются параметры с одного конфига переезжают в другие, если инструкция из данной статьи не подойдет, то рекомендую идти на официальную страницу WIKI от SonarQube.
Как установить SonarQube:
Скачиваем дистрибутив SonarQube Community Edition (бесплатная версия). У меня загрузилась версия 9.8.0.63668
Распаковываем в c:\tools\sonarqube\
Надо отметить, что по умолчанию используется встроенная база данных, она подойдет только в случае, если хотите посмотреть продукт. Для продуктива используйте MS SQL, PostgreSQL или Oracle.
Мы используем PostgreSQL, так как она бесплатна и функциональна.
Когда выйдет обновление SonarQube, в каталоге $home_sonarqube$ (c:\tools\sonarqube\) копируем содержимое обновленного дистрибутива SonarQube, правим конфиг «sonar.properties» и переходим по ссылке. Не забываем о резервной копии базы!
Обращаем внимание на требования SonarQube.
Я установил PostgreSQL 13 версию, не стал гнаться за новизной, как правило, в новых версиях больше ошибок и могут возникнуть вопросы.
Сейчас можно спокойно ставить 15 версию PostgreSQL.
Настройка SonarQube
Исключаем код, который на поддержке. Ниже прикрепляю скрин:
В SonarQube включены правила АПК, которые включаются следующей галочкой, эту настройку надо включать если планируете загрузить результат проверки вашей конфы правилами АПК в формате report.json.
В данном формате из АПК выгружается благодаря обработке Олега Тымко.
На текущем этапе мы не используем проверки АПК, так как в большинстве случаев они покрывают проверками из плагина SonarQube-а BSL Language Server
Предварительно в PostgreSQL я создал пустую базу и пользователя sonaradmin
В $SONARQUBE-HOME/conf/sonar.properties добавил строки:
sonar.jdbc.username=sonaradmin
sonar.jdbc.password=sonaradmin
sonar.jdbc.url=jdbc:postgresql://localhost/sonar_db?currentSchema=sonar_schema
Если будет что-то непонятно, то посмотрите в архиве к статье, там мои рабочие конфиги.
Для того, чтобы в анализ не включались объекты на поддержке, необходимо сделать следующую настройку BSL плагина (см. скрин).
Запуск SonarQube на первых порах рекомендуется выполнять батником
c:\tools\sonarqube\bin\windows-x86-64\StartSonar.bat
Батник запускайте к командной строке, чтобы логи у вас остались и вы видели ошибки.
Установка PostgreSQL
Я установил PostgreSQL от команды postgresPro отсюда, с расчетом, что буду еще разворачивать тестовые 1С на данном сервер базы данных.
Создаем пользователя с паролем sonaradmin:
CREATE USER sonaradmin WITH PASSWORD 'sonaradmin';
Создаем групповую роль:
CREATE role "sonarrole" NOSUPERUSER INHERIT CREATEDB NOCREATEROLE LOGIN;
Добавляем в ранее созданную группу пользователя ‘sonaradmin’:
GRANT "sonarrole" to sonaradmin;
Создаем базу sonar_db:
create database sonar_db owner sonarrole;
Подключаем в новую базу
\с sonar_db sonaradmin
Вводим пароль от пользователя sonaradmin
Создаем новую схему:
create schema sonar_schema AUTHORIZATION sonaradmin;
Проверяем какие схемы у базы:
\dn
Так я добавился, чтобы базы находилась в одной схеме, поэтому я удаляю схему из базы sonar_db следующей командой:
\c sonar_db postgres
drop schema public;
\dn
Выдаем групповой роли sonarrole:
alter user sonaradmin set search_path to sonar_schema;
Настройка Elasticsearch
В инструкции рекомендуется elasticsearch разместить на отдельном инстансе (сервере, разделе) с быстрыми дисками. В версии 9.8 sonarqube elasticsearch расположен в $SONARQUBE-HOME/elasticsearch
Редактируем $SONARQUBE-HOME/conf/sonar.properties у меня получается так:
sonar.path.data=c:/tools/sonarqube/elasticsearch
sonar.path.temp=c:/tools/sonarqube/temp
Важно! Обращайте внимание, что используется обратный слеш. Пользователь, который будет запускать SonarQube, должен иметь права на чтение и запись в настроенные каталоги.
Настройка Web server
По умолчанию Web server настроен на использование порта 9000 с добавлением “/” в строке подключения.
При необходимости редактируем уже известный нам конфиг:
$SONARQUBE-HOME/conf/sonar.properties (указаны параметры моей песочницы):
sonar.web.host=localhost
sonar.web.port=9000
sonar.web.context=/sonarqube
Если IP не указываем, то подключения принимаются на всех IP-адресах хоста.
SonarQube будет доступен по ссылке: http://localhost:9000/sonarqube
Настройка SonarQube
В конфиге нужно указать сколько памяти выделяется на Elasticsearch, фоновые задания и Web server:
sonar.search.javaOpts=-Xmx6g -Xms6g -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts=-Xmx6g -Xms6g -XX:+HeapDumpOnOutOfMemoryError
sonar.web.javaOpts=-Xmx2g -Xms2g -XX:+HeapDumpOnOutOfMemoryError
Первый запуск SonarQube (проверка)
Выполняем запуск из командной строки, чтобы видеть все ошибки в консоле и посмотреть все ошибки можно в каталоге
Выполняем запуск из командной строки, чтобы видеть все ошибки в консоле и посмотреть все ошибки можно в каталоге
c:\tools\sonarqube\logs\
Уровень логирования настраивается в конфиге SonarQube
У меня не стартануло, потому что не нашлась Java, она неправильно была определена в переменной JAVA_EXE
В батниках SonarService.bat и StartSonar.bat установил set JAVA_EXE=java, т.к. встроенный не отработал.
Вот это закомментил:
set JAVA_EXE=
call "%REALPATH%lib\find_java.bat" set_java_exe FAIL || goto:eof
call :check_if_sonar_is_running FAIL || goto:eof
Сделал так:
set JAVA_EXE=java
После запуска Sonar-а, где логин пароль admin/admin, пошел в раздел Administartion-MarketPlace.
Жмакнул на кнопку, что принимаю риск на установку плагинов из маркетплейса, и только после этого появилась кнопка Install у плагинов.
Выбираем 2 плагина: 1C (BSL) Community Plugin и Russian Pack:
Оба плагина теперь имеют статус «Install Pending» — ожидает перезапуск SonarQube. После установки 2 плагинов необходимо перезапустить SonarQube: жмем на Restart и ждем пару минут.
SonarQube остановился, если в диспетчере задач ступенькой уменьшается потребление оперативной памяти, завершился Web сервер, Elasticsearch и движок SonarQube. Если сам на завершается, то рубим руками жирные процессы «Java».
Кто знает более красивое решение, напишите в комментариях к статье.
Спустя 5 минут SonarQube не запустился, я пошел и запустил службу SonarQube или в терминале
sc start SonarQube
Cразу видно в диспетчере ступеньку по увеличению потребления оперативной памяти. Если у вас пока еще нет службы, то выполните батник StartSonar.bat.
В результате мы видим знакомый язык в интерфейсе SonarQube-а.
Другой способ установки плагина: скачать плагин *.jar и положить в каталог %Sonarhome%\ extensions\plugins\
У меня это выглядит вот так:
Заходим в SonarQube:
Администрирование – Безопасность – Пользователи. Добавляем пользователя и добавляем его в группу админов.
Релогин в SonarQube:
Администрирование – Конфигурация - Безопасность.
Переключаем тумблер для запрета анонимного входа (см. рисунок ниже):
Далее заходим в свой профиль, далее в раздел «Безопасность» (см. скрин ниже), генерируем себе и сохраняем токен, чтобы его подсунуть в Sonar Scanner.
Примечание:
Рекомендую использовать и применять токены в скриптах, различных синхронизациях, когда можно сделать доступ по токену.
Первое, что меня привлекло, смена пароля не остановит интеграции, пароль свой тоже не нужно оставлять открытым в скриптах.
Далее настраиваем оповещения по email для пользователя, отмечаем, по каким событиям пользователь будет получать оповещения:
Важное замечание — для каждого пользователя все настраивается отдельно.
Теперь перейдем к настройки плагина 1С BSL. Исключаем код, который на поддержке:
Список правил плагина можно посмотреть в разделе:
Профили качества – BSL Language Server rules
Переходим по гиперссылкам, чтобы посмотреть все правила более подробно.
Когда все будет работать, рекомендуется установить виндовую службу командой
%sonarqube%\bin\windows-x86-64\SonarService.bat install
Gitlab
Я не буду подробнее останавливаться и описывать, что такое GitLab, а сразу перейду к установке. Предполагаю, что вы это уже знаете, или готовы потратить время и расширить свой кругозор самостоятельно.
Установка Gitlab
Обращаемся к официальной инструкции по установке GitLab-а.
Далее стандартно обновляем Ubuntu и устанавливаем полезные утилиты:
sudo -i
apt update
apt upgrade
apt install -y curl openssh-server ca-certificates tzdata perl net-tools
Далее устанавливаем postfix отправки электронных писем. Если планируется использовать другой способ оповещение, то пропустите этот шаг:
apt install -y postfix
Я использую smtp сервер Яндекса. Сразу не удалось настроить, поэтому далее привожу параметры, если вы тоже будете использовать подобную схему.
Обращаемся к официальной инструкции. Она обновляется, поэтому не стоит про нее забывать.
Далее запускаем начальную установку.
На 02.07.2022 установить GitLab с российского IP адреса не удалось, была ошибка «доступ запрещен», а также открытый ключ PGP репозитория GitLab-а не добавлялся в доверенные.
Пробовал обновить ключ репозитория:
curl --silent https://packages.gitlab.com/gpg.key | sudo apt-key add
и добавил недостающий публичный ключ:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3F01618A51312F3F
Это решило ошибку подключения к репозиторию GitLab-а, но сама репа недоступна и отваливается по 403 ошибке.
После некоторые мучений и поиска, попробовал свой VPN с немецким IP-адресом. Это решило проблему. Репа Gitlab-а стала доступна и GitLab установился.
Был еще один нюанс: я поставил себе Ubuntu без графического интерфейса, а VPN клиент был у меня только графическим клиентом, пришлось добавлять графический рабочий стол… Как вы понимаете, были сложности.
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | bash
apt install gitlab-ee
Теперь нам необходимо подготовить программу к работе. Сначала нужно настроить URL, по которому будет открываться интерфейс GitLab.
Для этого откройте файл /etc/gitlab/gitlab.rb и найдите там строчку external_url. Здесь нужно указать ваш домен. На своём локальном компьютере я буду использовать домен gitlab.local:
Меняем удобным для себя способом параметр, я, например, использую midgth commander и уже в Far по F4 все редактируется так, как я привык.
external_url 'http://gitlab.local'
Запускаем начальную настройку
gitlab-ctl reconfigure
Теперь можно зайти на GitLab через web-интерфейс. IP-адрес можно посмотреть через команду ifconfig:
Примечание:
Если вас «ломает» набирать команду, то рекомендую себя перебороть и вводить руками команды в консоли, так как спустя время получение информации через консоль будет куда быстрее, да и в голове больше понимания будет. Мозги надо перестраивать и учиться работать без мыши.
Переходим по ссылке (я позже поменял на dhcp выдачу красивого ip адреса, поэтому теперь GitLab у меня на 192.168.2.25)
http://192.168.2.25/users/sign_in
По инструкциям пишут, что будет предложено ввести логин root и изменить текущий пароль. У меня не было такого окна, и пришлось сбрасывать пароль для доступа к GitLab-у.
Поэтому в консоли вводим команду:
root@ubuntu:~# gitlab-rake "gitlab:password:reset"
Enter username: root
Enter password: вводим новый пароль
Confirm password: повторно вводим новый пароль
Password successfully updated for user with username root.
Настройка отправки почты из GitLab
Редактируем конфиг файл:
/etc/gitlab/gitlab.rb
Для отправки писем из Яндекса
Вот пример моего конфига, чтобы вы не мучались, выделил желтым поля, которые нужно заполнить:
### GitLab email server settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.yandex.ru"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gal@yandex.ru"
gitlab_rails['smtp_password'] = "dlsmf;s ldkqwecqw##$@FF"
gitlab_rails['smtp_domain'] = "yandex.ru"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
gitlab_rails['gitlab_email_from'] = 'gal@yandex.ru'
gitlab_rails['gitlab_email_reply_to'] = 'gal@yandex.ru'
После внесения изменений в конфиг файл GitLab запустите команду:
root@gitlab:~# gitlab-ctl reconfigure
Из консоли можно проверять отправку писем командой:
root@gitlab:/etc/gitlab# gitlab-rails console
irb(main):002:0> Notify.test_email('gal@yandex.ru', 'Message Subject', 'Message Body').deliver_now
Sonar Scanner
Установка Sonar Scanner
Скачиваем Sonar Scanner с официальной страницы, так как он периодически обновляется. Эта версия без Java, у нас уже установлена 17 Java от Adoptium, будем ее использовать.
Настройка Sonar Scanner
Далее настраиваем конфигу Sonar Scanner. Архив будет содержать вот такую структуру:
В указанном каталоге правим конфиг sonar-scanner.properties. Рекомендую для этого использовать VisualStudioCode:
#----- Default SonarQube server
sonar.host.url=http://localhost:9000/SonarQube
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
Для удобства в переменную Path добавляю расположение sonar-scanner.bat
В каталоге локального Git-репозитория есть конфиг sonar-project.properties. Ниже приведен мой вариант, у вас будет свой.
sonar.host.url=http://localhost:9000/sonarqube
#sonar.projectKey=ones-information-system-id
sonar.projectKey=NameProjectGitlab
sonar.sources=./src/cf
sonar.tests=./tests
sonar.inclusions=**/*.bsl, **/*.os
sonar.sourceEncoding=UTF-8
sonar.login=sqp_e62f5cb252f1d5f3b4b5f32c44e28b64a2702aa4
projectVersion=1.0
в свойство sonar.login прописывает токен пользователя, под которым будет загружаться анализ кода в SonarQube.
Токен генерируется в SonarQube:
Мой аккаунт - Безопасность – Generate Token
Конфиг для Sonar Scanner читается в первую очередь из домашней директории Sonar Scanner-а. Далее из корня репозитория sonar-scaner по умолчанию в текущей директории ищется sonar-project.properties
Некоторые параметры типа адреса SonarQube, кодировку можно перенести в конфиг, который лежит каталоге Sonar Scanner-а, а уже на отдельных проектах в корень формировать свой конфиг.
Имейте в виду у вас будет много проектов, все начинается с одного, но обязательно вы захотите проверять все свои конфигурации.
Примечание:
Обратите внимание, регистр имеет значение. Чтобы не ошибаться и ломать голову над очередной ошибкой «не найден файл», используйте строчные буквы.
Ожидаемо, что первый запуск Sonar Scanner-а будет падать с ошибкой, поэтому не повторяйте моих ошибок, и добавляйте «-X»
sonar-scanner -X
и смотрите, на что ругается. Думаю, сообразите, куда копать.
В итоге мы должны получить следующее:
Формирование Git-репозитория из вашего хранилища 1С
Установка Git Cli
Скачиваем свежий Git CLI.
Первое окно с настройками по умолчанию
На следующем шаге выбираем редактор по умолчанию, я использую VisualStudio Code Это в своем роде стандарт — распространённый и удобный редактор для работы с текстом с подключенным Git-репозиторием.
На следующем шаге можем изменить название ветки мастер (я оставляю по умолчанию).
Далее в установке выбираем установку дополнительных полезных Unix-команд.
Затем выполняем 2 шага по работе с SSH? На текущий момент нажимаем все по умолчанию. На следующем этапе оставляем первый вариант, так как он полезен, когда ведется и тестирование на виндовой и линуксовой машине. Оставляем первый вариант и идем дальше.
На следующем шаге выбираем, какой терминал использовать для выполнения команд. Оставляем вариант по умолчанию.
Затем выбираем, что делать при выполнении команды Git pull, а именно при получении кода с внешнего репозитория в локальный.
Включаем встроенный монитор, но прежде придется прочитать, как им пользоваться
Создаем репозиторий из шаблона vanessa-bootstrap
Для своего проекта 1С используем шаблон, который добрые люди уже сделали для всех желающих. Внутри репозитория лежит README.dm, читаем его и повторяем.
Переключаемся в пустой рабочий каталог своего продукта:
cd название-вашего-продукта-1С
клонируем репозиторий
git clone https://github.com/vanessa-opensource/vanessa-bootstrap.git.
Важно: не потеряйте точку в конце строки команды.
Подписываемся на обновление шаблона
git remote add -f --no-tags -m --mirror bootstrap https://github.com/vanessa-opensource/vanessa-bootstrap.git
git remote remove origin
подключаем репозиторий к своему Git-серверу (GitHub, Bitbucket, GitLab, etc)
git remote add origin git://new.url.here
В локальном каталоге есть 2 файла, которые нужно предварительно настроить и потом запустить от администратора для настройки параметров локального репозитория git ./tools/git-global-init.cmd и git-global-init-admin.cmd
Проверить, что все заполнилось, можно командами
git config -l
Посмотреть, в каких файлах сохранены настройки
git --config-origin
Установка и настройка Gitsync
Для выгрузки файлов из хранилища в Git-репозиторий, используется утилита GitSync. Она устанавливается следующим образом:
opm install gitsync
Проверка:
gitsync –version
В хранилище создаем отдельного пользователя, например to-git, который будет подключаться и выгружать из хранилища 1С в локальный Git-репозиторий.
Пример:
Результат выгрузки из хранилища в Git-репозиторий можно посмотреть в командной строке командой:
git log –oneline
В упрощенном варианте Gitsync заменяет набор команд:
git add
git commit -m « комментарий коммита»
git push
Gitsync имеет ряд плагинов, которые упрощают жизнь. Например, GitSyncAuthor позволяет заменить автора, который поместил изменение в хранилище 1С.
Примеры таких применений:
поработал в базе под другим пользователем, чтобы не переключать базу с одного пользователя на другого;
выполняем обновление от вендора или добавляем стороннее расширение в хранилище, например, от Диадока, Set и прочее, и не хотим видеть в Sonar-е замечания под собой, так как обычно правятся наши замечания, а за правки сторонних расширений клиент платить не будет.
Инициализация Gitsync
В моем случае репозиторий отсутствует, и я инициализирую локальный Git-репозиторий. Инициализируем основное хранилище 1С:
gitsync -v init -u to-git -p to-git c:\repo1c\erp\automacon\ c:\git-repo\erp\src\cf
Инициализируем хранилище расширения 1С:
gitsync -v init -u to-git -p to-git -e Automacon c:\repo1c\erp\automacon\ c:\git-repo\erp\src\cfe
Ключик -v полезный, он помог мне решить 2 разные проблемы:
не было прав на изменение в каталоге Git-репозитория;
строка инициализации для хранилища расширения отличается от инициализации Git-репозитория основного хранилища.
Процедурой инициализации мы получаем 2 файла Authors и Version в каталоге с исходниками.
Authors – сопоставление пользователей в хранилище 1С и пользователей в GitLab-е
Version – версия конфигурации и счетчик, который подсчитывает, сколько раз загрузилось в git-коммиты из хранилища.
Для постоянной выгрузки изменений из хранилища в Git-репозиторий использую следующие батники:
Для выгрузки основной конфигурации (gitsync-sync_conf_erp.cmd):
@echo off
rem @chcp 65001
set GITSYNC_WORKDIR=c:\git-repo\client\erp\src\cf\
set GITSYNC_STORAGE_PATH=tcp://localhost/lenta/erp/conf
set GITSYNC_STORAGE_USER=gitbot
set GITSYNC_STORAGE_PWD=gitbot
set GITSYNC_REMOTE_PUSH=true
set GITSYNC_REMOTE_PULL=true
gitsync -v sync
Для выгрузки расширения (gitsync-sync_cmd_automacon.cmd):
@echo off
rem @chcp 65001
set GITSYNC_EXTENSION=Automacon
set GITSYNC_WORKDIR=c:\git-repo\lenta\erp\src\cfe\automacon
set GITSYNC_STORAGE_PATH=tcp://localhost/lenta/erp/automacon
set GITSYNC_STORAGE_USER=gitbot
set GITSYNC_STORAGE_PWD=gitbot
set GITSYNC_REMOTE_PUSH=true
set GITSYNC_REMOTE_PULL=true
gitsync -v sync
Использование АПК в проверке кода
Что такое конфигурация АПК (Автоматизированная проверка кода), читаем здесь.
Есть замечательный проект на GitHub-е по выгрузке результатов проверки из АПК в xml-в формате, который понимает SonarQube для удобного просмотра всех замечаний в одном месте. Автор — Олег Тымко, его профиль есть на «Инфостарте».
Кратко, как это работает: клонировали репозиторий проекта себе на компьютер, ознакомились с инструкцией и получили json, подправили конфиг SonarScanner и результат видим в SonarQube с отдельным тегом.
Установка АПК и первый запуск
Скачиваем АПК;
Разворачиваем файловую базу, именно файловую (!);
Запускаем АПК;
Добавляем новую конфигурацию.
В моем случае у конфигурации есть хранилище, что отображено в настройках.
Помним, что при обновлении платформы нужно будет поменять в настройках конфигурации версию платформы.
На вкладке «Проверяемые требования» выбираем, какие требования вы должны выполнить. Начните с малого, чтобы выгрузка и проверка конфигурации проходила быстрее.
Есть еще такое понятие, особенности, на рис. 39 отдельная вкладка — это исключение ошибок, которые есть в конфигурации, например, ранее ошибок не было или взяли типовую конфигурацию, в которой есть такие ошибки, их править не нужно.
Но типовые конфигурации проверяются данной конфигурацией и не должны давать дополнительных замечаний. Более того, чтобы конфигурация стала 1С:Совместимо, она должна пройти все проверки «1С:Совместимо (1С:Предприятие)».
Выгрузка и загрузка результата из АПК в SonarQube
Из проекта «Экспорт диагностик из АПК для Sonar» читаем мануал.
Примермоего конфига: acc.properties
acc.projectKey=test
acc.catalog=C:/RepoFor1C/test/
acc.result=./tools/acc-export/acc-json.json
acc.sources=./src/cf/
acc.check=true
acc.format=reportjson
acc.titleError=code
acc.relativePathToFiles=true
acc.objectErrors=true
acc.recreateProject=true
acc.exportRules=true
acc.fileClassificationError=
acc.sourcesRelative=./src/cf/
Важно, что мне удалось загрузить результат в формате reportjson
В обработке заполнение по экспорту данных в json внес корректировки по заполнению поля
EngineId «acc»
В Sonar-е это выглядит вот так:
Автоматизированная загрузка из АПК в SonarQube с применение CI Gitlab
Внутри компании только часть команд таким образом запрашивает, другие отказались.
Если будет запрос, добавлю к этой статье. Отпишитесь в комментариях.
Проблемы, с которыми столкнулся
Много замечаний в SonarQube (десятки тысяч)
Поделюсь алгоритмом, который я для себя составил. Он появился в результате помощи, полученной в ТГ-группе «SonarQube / 1С АПК Автоматизированная проверка конфигураций»:
Есть ли в исходниках файл Ext/ParentConfigurations.bin?
Используется ли в настройках проекта переопределение профиля качества настройками из файла конфигурации BSL LS
Проверяем настройки проекта в SonarQube.
Настройки проекта – Общие настройки – 1С (BSL)
3. Смотрим замечания в SonarQube.
Список источников:
Н. Федькин. «Мастер-класс SonarQube. В омут с головой». https://infostart.ru/1c/articles/1661973/
В. Подымников. «Практика применения DevOps. Работа с SonarQube». https://infostart.ru/1c/articles/1340227/
Установка Gitlab: https://www.8host.com/blog/ustanovka-i-nastrojka-gitlab-v-ubuntu-18-04/
Установка Gitlab на Ubuntu 18.04: https://losst.ru/ustanovka-gitlab-v-ubuntu-18-04
Сбросить пароль пользователя в gitlab:
https://docs.gitlab.com/ee/security/reset_user_password.html
Шпаргалка по консольным командам Git:
https://github.com/cyberspacedk/Git-commands/blob/master/readme.md
https://github.com/vanessa-opensource/vanessa-bootstrap
https://infostart.ru/1c/articles/903269/#СкриптВыгрузки
https://habr.com/ru/company/ruvds/blog/522334/
https://habr.com/ru/company/skillfactory/blog/509344/
https://курсы-по-1с.рф/news/devops-co-projects/
Рарус тоже отличился и написал отличную и понятную статью: https://rarus.ru/publications/20210827-ot-ekspertov-kachestvennyj-kod-v-1c-avtomatizirovannaya-proverka-konfiguracij-sonarqube-492925/#vosprinimaemaya-slozhnost-koda
https://infostart.ru/public/1501807/
https://its.1c.ru/db/sppr2doc/content/64/hdoc
За подготовку данной статьи благодарю мои коллег: Леонида Ванина, Евгения Афанасьева, Нику Зурначеву.