Добрый день, хабровчане!

Меня зовут Михаил Галац, за моими плечами насыщенный опыт в 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:

  1. Standalone.

  2. Free. Мы используем бесплатную версию и этого пока достаточно.

  3. Возможность размещать свои репозитории и сборочную линию в одном продукте. 

  4. В конфиге для сборочной линии кириллицу не нужно переводить в юникод. В .gitlab.yml можно использовать кириллицу.

  5. Репозиторий и CI/CD в одном флаконе.

Давайте посмотрим как будет выглядеть настройка в новом проекте.

Для удобства все использованные программные продукты (дистрибутивы и конфигурации) можно скачать отсюда. Перед запуском на новых версиях, обязательно посмотрите требования SonarQube. 

Установка OneScript

  1. Скачиваем и устанавливаем сам OneScript. Для прода выбирайте версию LTS;

  2. Обновляем все библиотеки. Команда: opm update НазваниеБиблиотеки;

  3. Вступаем в канал ТГ разработчика OneScript;

  4. Почитать подробнее о библиотеках здесь и здесь.

Установка JDK

Рекомендую использовать бесплатный вариант OpenJDK. 24 июля 2022 года произошел ребрендинг и теперь этот продукт называется «AdoptOpenJDK». Скачать уже openjdk можно с этой страницы.

Да, вы можете использовать и от Oracle, но работая в коммерческой организации, вы будете нарушать лицензионное соглашение, а оно вам надо?

Актуальная версия на 29 декабря 2022 года: jdk-17.0.5+8

У меня установился в каталог c:\Program Files\Eclipse Adoptium\. При установке выбираем установку переменной JAVA_HOME.

Рисунок 1 — Параметры установки Adoptium OpenJDK
Рисунок 1 — Параметры установки Adoptium OpenJDK

После установки проверяем, установился или нет:

cmd

java -version

Если все в порядке, то увидим версию Java.

Рисунок 2 — Результат команды  java -version
Рисунок 2 — Результат команды  java -version

Если будет ошибка, то можно проверить значение переменной 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

Исключаем код, который на поддержке. Ниже прикрепляю скрин:

Рисунок 3 — Настройка SonarQube. Исключаем объекты конфигурации, которые на поддержке
Рисунок 3 — Настройка SonarQube. Исключаем объекты конфигурации, которые на поддержке

В SonarQube включены правила АПК, которые включаются следующей галочкой, эту настройку надо включать если планируете загрузить результат проверки вашей конфы правилами АПК в формате report.json.

В данном формате из АПК выгружается благодаря обработке Олега Тымко.

Рисунок 4 — Включить использование правил АПК.
Рисунок 4 — Включить использование правил АПК.

На текущем этапе мы не используем проверки АПК, так как в большинстве случаев они покрывают проверками из плагина 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

Рисунок 5 — Список схем на сервере баз данных
Рисунок 5 — Список схем на сервере баз данных

Так я добавился, чтобы базы находилась в одной схеме, поэтому я удаляю схему из базы sonar_db следующей командой:

\c sonar_db postgres

drop schema public;

\dn

Рисунок 6 — Список схем на сервере баз данных, без схем public
Рисунок 6 — Список схем на сервере баз данных, без схем public

Выдаем групповой роли 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 у плагинов.

Рисунок 7 — Предупреждающее сообщение при использовании MarketPlace в SonarQube
Рисунок 7 — Предупреждающее сообщение при использовании MarketPlace в SonarQube
Рисунок 8 — Список существующих плагинов и варианты установки
Рисунок 8 — Список существующих плагинов и варианты установки

Выбираем 2 плагина: 1C (BSL) Community Plugin и Russian Pack:

Рисунок 9 — Список плагинов для установки
Рисунок 9 — Список плагинов для установки

Оба плагина теперь имеют статус «Install Pending» — ожидает перезапуск SonarQube. После установки 2 плагинов необходимо перезапустить SonarQube: жмем на Restart и ждем пару минут.

Рисунок 10 — Информационные окна SonarQube
Рисунок 10 — Информационные окна SonarQube

SonarQube остановился, если в диспетчере задач ступенькой уменьшается потребление оперативной памяти, завершился Web сервер, Elasticsearch и движок SonarQube. Если сам на завершается, то рубим руками жирные процессы «Java».

Кто знает более красивое решение, напишите в комментариях к статье.

Спустя 5 минут SonarQube не запустился, я пошел и запустил службу SonarQube или в терминале

sc start SonarQube

Cразу видно в диспетчере ступеньку по увеличению потребления оперативной памяти. Если у вас пока еще нет службы, то выполните батник StartSonar.bat.

В результате мы видим знакомый язык в интерфейсе SonarQube-а.

Рисунок 11 — Список установленных плагинов с фильтром по подстроке «rus»
Рисунок 11 — Список установленных плагинов с фильтром по подстроке «rus»

Другой способ установки плагина: скачать плагин *.jar и положить в каталог %Sonarhome%\ extensions\plugins\

У меня это выглядит вот так:

Рисунок 12 — Пример расположения jar файлов на тестовом стенде
Рисунок 12 — Пример расположения jar файлов на тестовом стенде

Заходим в SonarQube:

Администрирование – Безопасность – Пользователи. Добавляем пользователя и добавляем его в группу админов.

Рисунок 13 — Пример расположения jar файлов на тестовом стенде
Рисунок 13 — Пример расположения jar файлов на тестовом стенде

Релогин в SonarQube:

Администрирование – Конфигурация - Безопасность.

Переключаем тумблер для запрета анонимного входа (см. рисунок ниже):

Рисунок 14 — Отключение анонимного доступа в SonarQube
Рисунок 14 — Отключение анонимного доступа в SonarQube

Далее заходим в свой профиль, далее в раздел «Безопасность» (см. скрин ниже), генерируем себе и сохраняем токен, чтобы его подсунуть в Sonar Scanner.

Рисунок 15 — Результат генерации токена
Рисунок 15 — Результат генерации токена

Примечание:

Рекомендую использовать и применять токены в скриптах, различных синхронизациях, когда можно сделать доступ по токену.

Первое, что меня привлекло, смена пароля не остановит интеграции, пароль свой тоже не нужно оставлять открытым в скриптах.

Далее настраиваем оповещения по email для пользователя, отмечаем, по каким событиям пользователь будет получать оповещения:

Рисунок 16 — Настройка почты отправки выполняется в разделе Администрирование – Конфигурация – Общие
Рисунок 16 — Настройка почты отправки выполняется в разделе Администрирование – Конфигурация – Общие

Важное замечание — для каждого пользователя все настраивается отдельно.

Теперь перейдем к настройки плагина 1С BSL. Исключаем код, который на поддержке:

Рисунок 17 — Настройка, исключающая код на поддержки из проверки
Рисунок 17 — Настройка, исключающая код на поддержки из проверки

Список правил плагина можно посмотреть в разделе:

Профили качества – BSL Language Server rules

Рисунок 18 — Список правил-шаблонов
Рисунок 18 — Список правил-шаблонов

Переходим по гиперссылкам, чтобы посмотреть все правила более подробно.

Когда все будет работать, рекомендуется установить виндовую службу командой

%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:

Рисунок 19 — Результат команды ifconfig на хосте с установленным gitlab
Рисунок 19 — Результат команды ifconfig на хосте с установленным gitlab

Примечание:

Если вас «ломает» набирать команду, то рекомендую себя перебороть и вводить руками команды в консоли, так как спустя время получение информации через консоль будет куда быстрее, да и в голове больше понимания будет. Мозги надо перестраивать и учиться работать без мыши.

Переходим по ссылке (я позже поменял на 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. Архив будет содержать вот такую структуру:

Рисунок 20 — Пример расположения конфигурационных файлов для Sonar Scanner-а
Рисунок 20 — Пример расположения конфигурационных файлов для 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

и смотрите, на что ругается. Думаю, сообразите, куда копать.

В итоге мы должны получить следующее:

Рисунок 21 — Результат успешного выполнения проверки Sonar Scanner-ом
Рисунок 21 — Результат успешного выполнения проверки Sonar Scanner-ом

Формирование  Git-репозитория из вашего хранилища 1С

Установка Git Cli

Скачиваем свежий Git CLI.

Первое окно с настройками по умолчанию

Рисунок 22 — Установка Git. Параметры установки git-а. Окно 1.
Рисунок 22 — Установка Git. Параметры установки git-а. Окно 1.

На следующем шаге выбираем редактор по умолчанию, я использую VisualStudio Code Это в своем роде стандарт — распространённый и удобный редактор для работы с текстом с подключенным Git-репозиторием.

На следующем шаге можем изменить название ветки мастер (я оставляю по умолчанию).

Рисунок 23 — Установка Git. Выбор редактора по умолчанию
Рисунок 23 — Установка Git. Выбор редактора по умолчанию
Рисунок 24 — Установка Git. Выбор название ветки по умолчанию
Рисунок 24 — Установка Git. Выбор название ветки по умолчанию

Далее в установке выбираем установку дополнительных полезных Unix-команд.

Рисунок 25 — Установка Git. Выбор установки дополнительных полезных unix команд
Рисунок 25 — Установка Git. Выбор установки дополнительных полезных unix команд

Затем выполняем 2 шага по работе с SSH? На текущий момент нажимаем все по умолчанию. На следующем этапе оставляем первый вариант, так как он полезен, когда ведется и тестирование на виндовой и линуксовой машине. Оставляем первый вариант и идем дальше.

Рисунок 26 — Установка Git. Настройка конвертации перевода строки
Рисунок 26 — Установка Git. Настройка конвертации перевода строки

На следующем шаге выбираем, какой терминал использовать для выполнения команд. Оставляем вариант по умолчанию.

Рисунок 27 — Установка Git. Выбор терминала для выполнения команд
Рисунок 27 — Установка Git. Выбор терминала для выполнения команд

Затем выбираем, что делать при выполнении команды Git pull, а именно при получении кода с внешнего репозитория в локальный.

Рисунок 28 — Установка Git. Выбор действия при выполнении команды Git pull
Рисунок 28 — Установка Git. Выбор действия при выполнении команды Git pull
Рисунок 29 — Установка Git. Выбираем данный пункт, чтобы использовать хранение паролей в виндовом хранилище и не вводить повторно каждый раз при подключении
Рисунок 29 — Установка Git. Выбираем данный пункт, чтобы использовать хранение паролей в виндовом хранилище и не вводить повторно каждый раз при подключении
Рисунок 30 — Установка Git. Оставляем использование кеша
Рисунок 30 — Установка Git. Оставляем использование кеша

Включаем встроенный монитор, но прежде придется прочитать, как им пользоваться

Рисунок 31 — Установка Git. Включаем встроенный мониторинг Git репозитория
Рисунок 31 — Установка Git. Включаем встроенный мониторинг Git репозитория

Создаем репозиторий из шаблона 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

Рисунок 32 — Конфигурационный файл git-global-init.cmd, который нужно заполнить под себя
Рисунок 32 — Конфигурационный файл git-global-init.cmd, который нужно заполнить под себя

Проверить, что все заполнилось, можно командами

git config -l

Посмотреть, в каких файлах сохранены настройки

git --config-origin

Установка и настройка Gitsync

Для выгрузки файлов из хранилища в Git-репозиторий, используется утилита GitSync. Она устанавливается следующим образом:

opm install gitsync

Проверка:

gitsync –version

В хранилище создаем отдельного пользователя, например to-git, который будет подключаться и выгружать из хранилища 1С в локальный Git-репозиторий.

Пример:

Рисунок 33 — Параметры настройки пользователя в хранилище 1С
Рисунок 33 — Параметры настройки пользователя в хранилище 1С

Результат выгрузки из хранилища в Git-репозиторий можно посмотреть в командной строке командой:

git log –oneline

Рисунок 34 — Результат выполнения команды git log –oneline
Рисунок 34 — Результат выполнения команды git log –oneline

В упрощенном варианте Gitsync заменяет набор команд:

git add

git commit -m « комментарий коммита»

git push

Gitsync имеет ряд плагинов, которые упрощают жизнь. Например, GitSyncAuthor позволяет заменить автора, который поместил изменение в хранилище 1С.

Примеры таких применений:

  • поработал в базе под другим пользователем, чтобы не переключать базу с одного пользователя на другого;

  • выполняем обновление от вендора или добавляем стороннее расширение в хранилище, например, от Диадока, Set и прочее, и не хотим видеть в Sonar-е замечания под собой, так как обычно правятся наши замечания, а за правки сторонних расширений клиент платить не будет. 

Рисунок 35 — Результат изменения автора у коммита. при помещении в хран добавлена строка --GitSyncAuthor ИмяПользователя
Рисунок 35 — Результат изменения автора у коммита. при помещении в хран добавлена строка --GitSyncAuthor ИмяПользователя

Инициализация 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 с отдельным тегом.

Установка АПК и первый запуск

  1. Скачиваем АПК;

  2. Разворачиваем файловую базу, именно файловую (!);

  3. Запускаем АПК;

  4. Добавляем новую конфигурацию.

В моем случае у конфигурации есть хранилище, что отображено в настройках.

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

Рисунок 36 — Окно конфигурации АПК. Создание новой конфигурации. Вкладка «Подключение»
Рисунок 36 — Окно конфигурации АПК. Создание новой конфигурации. Вкладка «Подключение»

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

Рисунок 37 — Окно конфигурации АПК. Создание новой конфигурации. Вкладка «Проверяемые требования»
Рисунок 37 — Окно конфигурации АПК. Создание новой конфигурации. Вкладка «Проверяемые требования»

Есть еще такое понятие, особенности, на рис. 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»

Рисунок 38 — Пример полученного json, который загружался в SonarQube
Рисунок 38 — Пример полученного json, который загружался в SonarQube

В Sonar-е это выглядит вот так:

Рисунок 39 — Скрин загруженных замечаний в SonarQube, полученных в АПК. Тег acc
Рисунок 39 — Скрин загруженных замечаний в SonarQube, полученных в АПК. Тег acc

Автоматизированная загрузка из АПК в SonarQube с применение CI Gitlab

Внутри компании только часть команд таким образом запрашивает, другие отказались.

Если будет запрос, добавлю к этой статье. Отпишитесь в комментариях.

Проблемы, с которыми столкнулся

Много замечаний в SonarQube  (десятки тысяч)

Поделюсь алгоритмом, который я для себя составил. Он появился в результате помощи, полученной в ТГ-группе «SonarQube / 1С АПК Автоматизированная проверка конфигураций»:

  1. Есть ли в исходниках файл Ext/ParentConfigurations.bin?

  2. Используется ли в настройках проекта переопределение профиля качества настройками из файла конфигурации BSL LS

  • Проверяем настройки проекта в SonarQube.

  • Настройки проекта – Общие настройки – 1С (BSL)

Рисунок 40 — Настройка BSL LS, что используется встроенный файл с конфигурацией
Рисунок 40 — Настройка BSL LS, что используется встроенный файл с конфигурацией

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

За подготовку данной статьи благодарю мои коллег: Леонида Ванина, Евгения Афанасьева, Нику Зурначеву.

Комментарии (0)