Демонстрационная база содержит примеры как для Windows, так и для Linux и примеры в ней
ориентированы на работу с СУБД MS-SQL и PostGRE SQL, чтобы соблюсти требования к
кроссплатформенности. Возможно, кому-то и примеры покажутся не
современными, так как в качестве командного процессора используется CMD,
который начиная с 13 релиза бегунов Gitlab
вроде, как и не поддерживается уже, но почему-то работает.
Вариант
для Linux
Примечание: некоторые изображения в тексте оставлены от варианта
разворачивания на ОС Windows, так
как они полностью аналогичны.
Для разворачивания демонстрационной базы Вам потребуется:
Более
подробно, по шагам.
Приведу схему, по которой рекомендую выстраивать
архитектуру тестового, продуктивного контура и контура разработки, для лучшего
понимания что и где мы будем настраивать:
От этой схемы в реальной жизни были сделаны некоторые
отступления, потому что эта схема была разработана для документа "Технология
разветвлённой разработки, использующая git, ci/cd". Одно
из отступлений отсутствие ветки release (в СППР >
2.0.2.12 для неё места не оказалось), а с учётом технологии
работы ветки версии, надобность в ней просто отпала. Другое отличие, что
при организации доступа сервера СППР к тестовому контуру, СППР может находиться
за пределами тестового контура, и, таким образом, быть разделена между
проектами. Мы так и работаем.
Есть
ещё один вариант выхода: заменить вызовы создания, загрузки / выгрузки ИБ на
новую утилиту ibcmd.exe из состава утилит автономного сервера, однако в практике всё
равно потребуется использовать 1С:Конфигуратор для создания файлов поставки. Кроме
этого, утилита ibcmd.exe работает эффективно и корректно начиная с версии платформы 8.3.20
Конечно же в реальных проектах, где ИБ может иметь размеры
более 50 Гб, копирование может отнять больше времени. Всё будет зависеть от
Вашего оборудования. Поскольку хранилище проекта в gitlab
ещё не создано, то полная идентичность всех трёх ИБ вполне нормальное явление,
так как, по сути, 3 несуществующих указателя веток указывают сейчас в одно
место - "в никуда".
14.Далее,
нужно проверить корректность формирования сборочной линии, прежде чем это
сделать, добавим алгоритм определения переменной в одноименном
справочнике - LockVersion и алгоритм "STD".
В логике сборочной линии анализируется значение этой переменной на значение
SSL, и в этом случае параметры передаются немного иные, тестовая база создана
на БСП версии ранее чем 3.1.5 и код завершение работы пользователей пропатчен до функционала БСП, который есть начиная в версии
3.1.5. Если Вы вдруг захотите попробовать в качестве тестовой ИБ какую-то свою
базу, проверьте версию БСП, если она 3.1.5 или выше - тогда алгоритм нужно
написать "SSL". После создания дополнительной переменно открываем
справочник "Сборочные линии", там уже должен быть один элемент DemoAM, встаём на него и жмём кнопку "Получить текст
сборочной линии". Сохраним полученный текст в файл с расширением yaml и откроем
редактором vim, он подсвечивает синтаксис yaml. Должно
быть примерно следующее:
Если вывод похож как на картинке, за исключением ваших имён серверов СУБД и
кластера 1С то переходим к следующему этапу.
2.
Настройка системы взаимодействия и интеграции СППР с gitlab в тестовом контуре
1. Первым
делом подключаем систему взаимодействия, если вы это не сделали сразу на шаге
1.4, инструкция как это сделать есть на ИТС: Глава 6. Администрирование
информационной базы :: Руководство администратора :: 1С:Предприятие 8.3.19.
Документация (1c.ru). Без этого шага вы в следующий не попадёте.
2. Следующий
шаг настройка бота, получение токенов из gitlab и
подключение СППР к ней.
1.
Открываем меню Управление сборкой/Сервис/Настройка уведомлений о
сборках и подключение к Gitlab API
Заполняем поля, к полям простые подсказки, я поставил другой аватар для бота, чтобы отличать его от собственных тестовых
баз, и жмём "Создать бота"
Обработка сама создаст пользователя СППР, отключит у него аутентификацию 1С и
включит аутентификацию ОС для указанного пользователя. В результате должна
форма немного изменится, вместо кнопки "Создать бота" появится кнопка
"Обновить бота". В списке пользователей должен появиться новый пользователь:
Обработка так же создаст в системе взаимодействия одноименного пользователя и
свяжет его с пользователем системы. Нам необходимо доработать пользователя
согласно рисунку выше, изменить способ аутентификации и создать ему хороший
пароль, запомнить его, он нам пригодится при публикации на веб сервере.
2.
В проектной деятельности, Вам лучше всего будет создать
служебную учётную запись СППР в сервисе gitlab,
добавить его в проект (потом вы можете этого же пользователя использовать и в
других проектах). Но в демонстрационных целях мы засорять сервисы gitlab служебными пользователями не будем, я привяжу свой
токен. Открываем наш сервис gitlab, у меня это будет
ссылка https://gitlab.чекушкины.рф/-/profile/personal_access_tokens
Теперь пропишем скопированный токен в СППР, чуть позже придётся вернуться к
этой настройке, чтобы прописать идентификатор созданного проекта:
3.
Следующим пунктом добавим себя в список администраторов сборок,
чтобы получать все уведомления о сборках:
3.
Публикация HTTP сервисов СППР на веб сервере. (контур
тестирования)
1. На этом
этапе я предполагаю, что вы уже заранее установили на свой ПК веб сервер,
настроили его и к нему есть доступ для сервисов веб хуков gitlab. Я в своих примерах буду использовать собственный
сервер https://gitlab.чекушкины.рф,
для того чтобы у него был доступ к моему СППР, мой локальный сервер Apache редиректится в
домен https://linux.чекушкины.рф, однако не все
программы понимают кириллицу, и поэтому в ссылках кое где указанные адреса
будут выглядеть как https://gitlab.xn--e1agfaq7azal4a.xn--p1ai
и https://linux.xn--e1agfaq7azal4a.xn--p1ai, это не ошибка, а
нормальная «двуличность» кириллических доменов.
Есть отличительная особенность, при публикации штатными средствами HTTP и
веб сервисов, сделанных в расширении: при публикации ИБ на веб сервере, вы не
увидите ни одного HTTP сервиса из расширения, вместо них один единый флаг «Публиковать
http сервисы
расширений» это особенность поведения конфигуратора. Поэтому, запускаем
конфигуратор с повышенными привилегиями (sudo /opt/1C/v8.3/x86_64/1cv8), и публикуем все http сервисы
конфигурации:
Если вы всё же захотите в итоге опубликовать вашу СППР в интернете, то для
основной публикации базы и для http сервисов сделайте разные публикации, это
связано с разными способами аутентификации. Для основной базы будет
использоваться стандартная аутентификация. А для http сервисов СППР имя пользователя
и пароль нужно задать прямо в публикации.
Соглашаемся на перезапуск. Откроем конфигурационный файл vim /var/www/DemoAM/default.vrd и
добавим логин и пароль для пользователя веб сервиса.
Записываем файл и перезапускаем sudo systemctl restart apache2, либо sudo /etc/init.d/apache2 restart
2. Для
проверки работоспособности веб сервиса получим сборочную линию, у меня
это будет ссылка: https://linux.чекушкины.рф/DemoAM/hs/GetPipeline/DemoAM-L/ci-module.yml
, где DemoAM -
имя публикации на веб сервере, hs/GetPipeline - имя
HTTP сервиса, второй раз DemoAM-L - имя сборочной
линии, и ci-module.yml - остаток от шаблона HTTP сервиса.
В качестве ответа должны получить вывод, аналогичный при нажати
и на кнопку "Получить текст сборочной линии":
4.
Создаём хранилище проекта из контура
разработки.
1. Встаём
на любой из трёх ИБ в тестовом контуре (напоминаю, они пока ещё полностью
идентичны), но, чтобы имя сформировалось нужное, рекомендую использовать базу,
привязанную к ветке версии: dev/101.
Откроем и подготовим базу к загрузке в контур
разработки, который у нас децентрализован, см.
схему в начале раздела, выше. В процессе подготовки происходит следующее:
выбранная база копируется в промежуточную базу TempDBForUpload,
далее конфигурация полностью снимается с поддержки, выгружается файл
ConfigDumpInfo.xml. Далее с этой ИБ создаётся архив Postgre SQL с суффиксом
пользователя в имени в каталоге для обмена, который так же прописан в пакетном
задании. К файлу ConfigDumpInfo.xml так же дописывается суффиксом имя
базы.
2. Далее
пользователю необходимо загрузить два файла см. GIF выше к себе на ПК для
присоединения к проекту. Т.е. в обычной ситуации, когда проект уже находится в
удалённом хранилище разработчик скачивает файлы из тестового контура,
восстанавливает из архива себе базу, при необходимости создаёт её себе в
кластере, и заменяет файл ConfigDumpInfo.xml (далее CDI) в рабочем каталоге
проекта EDT. Как это сделать останавливаться подробно не стану, это описано
подробно в другой моей статье "О синхронизации ИБ с проектом в
EDT". Манипуляции с файлом CDI необходимы, чтобы
сэкономить время на первичной сборке, это ни много не мало, для конфигурации УХ
это около 35 минут на топовом оборудовании. Если ваша конфигурация не
большая, или вы ведёте разработку в расширении советами с подменой CDI
можно пренебречь.
В нашем, демонстрационном случае, хранилища ещё нет, и тестовый контур совмещён
с контуром разработки, поэтому восстанавливать файлы из архива не будем,
после отработки пакетного файла у нас в информационных базах Postgres и в кластере осталась
база TempDBForUpload, уже готовая к эксплуатации, с неё и создадим
проект:
Далее делаем проект общим:
Я предлагаю создать папку git проекта DemoCMPrj внутри воркспейса EDT,
у меня это будет W:\ws_DemoCM\DemoCMPrj, и проект EDT будет в подкаталоге DemoAM проекта git, именно на эту
структура проекта git настроена сборочная линия. В
будущем, вы конечно можете выбрать другие
расположения, как Вы привыкли или как Вам удобнее. Не забываем о том, что
итоговая длина пути до каталога src должна быть как
можно меньше, согласно рекомендаций разработчиков EDT, в особенности если
Ваша конфигурация имеет много вложенных подсистем, имеющих длинные наименования.
Далее в панели "Индексирование", если она не открыта то открыть её
через меню "Окно/Показать панель", переносим все файлы
из неиндексированных изменений в индексированные, и фиксируем изменения, в
реальных проектах настоятельно рекомендую в комментарии к помещению указать версию типовой конфигурации.
Например: "ERP 2.5.48.3 Типовая". Когда будете смотреть Git-blame будет сразу ясно по комментарию откуда этот код.
Далее первое помещение нужно отправить в удалённое хранилище Git, сделаем это в панели
"Репозитории GIT":
Вводимые каталоги потом будет поменять очень трудно, поэтому смотрим
внимательно.
3. Итогом
отправки в Git имеем диалог:
5.
Теперь откроем наш проект в сервисе gitlab
(здесь и в шагах далее контур тестирования): у меня это будет ссылка https://gitlab.чекушкины.рф/check/DemoAMPrg/,
затем перейдём на Settings/General.
Нам нужен Project ID:
Вставляем этот идентификатор куда? Там, где заполняли токен доступа к проекту:
ВАЖНО! Если вы на шаге 2.2 создали токен доступа для другого пользователя (у
меня это пользователь ADS (СППР)),
не для себя, самое время добавить этого пользователя в члены проекта. Добавлять
его нужно с правами Maintainer:
6.
Следующим шагом будет встраивание в проект и проверка
работоспособности сборочной линии.
1. Нам
нужно в корне проекта создать файл .gitlab-ci.yml,
сделаем это сразу непосредственно в сервисе gitlab,
однако защита по умолчанию ветки master нам не
позволит этого сделать (её конечно же можно снять в Settings/Repository/Protected branches), но мы сделаем по другому:
2. Завершим
настройки "Демо проекта" в СППР, откроем
ветку версии (dev/101) и создадим ветку версии из
СППР, тем самым убедимся, что всё получилось хорошо, и запросы от СППР доходят
корректно до gitlab. Открываем демо
проект, закладка "Разработка"
3. Откроем
ветку dev/101
4. Проверим
в веб сервисе хранилища:
Видим, что ветка создалась, но она не защищена. Настроим рекомендуемые
параметры веток в удалённом хранилище, открываем в веб сервисе gitlab раздел Settings/Repository/Protected branches. Заменим (усилим) настройки для master (я обманул, можно было настройки конвейера запушить
сразу) чтобы никто не смог ничего в ветку master
запушить, и таким образом останется только один допустимый способ изменений в
ветке master: запрос на слияние и его удовлетворение.
Так же добавим более мягкие настройки для ветки dev/101
5. Далее,
откроем ветку dev/101: и добавим новый файл в корень
проекта:
Сборочная линия готова, автоматически она не стартовала только лишь потому, что
для ветки dev/101 настроена на запуск только по
двум событиям: web и sheduller.
Кроме того, первое задание бы застряло, так как отсутствуют бегуны, которые
могли бы эти задания выполнить. Кроме этого, так как в ветке master пока ещё сборочная отсутствует, gitlab
будет предлагать различные варианты готовых шаблонов в разделе CI/CD - Pipelines. Чтобы он увидел что
сборочная линия уже есть, нужно слить ветку dev/101
в ветку master. Для этого необходимо создать запрос
на слияние ветки dev/101 в ветку master.
Сделаем это в разделе "Merge requests"
Gitlab помнит, что мы сделали фиксацию в ветке dev/101
и предлагает создать запрос на слияние в ветку master.
Если кнопки нет, то возможно с момента фиксации сборочной линии прошло более
одного часа, чуть ниже и правее есть обычная кнопка создания запроса на
слияние, отличие в том, что нужно будет выбрать ветку источник и ветку приёмник
вручную. Далее, последовательно, записываем и принимаем запрос на слияние:
6. Для
настройки бегунов гитлаба устанавливаем его из
консоли: sudo
apt-get install gitlab-runner. Можете
прочитать инструкцию по установке полностью.
Я рекомендую, в целях демонстрации поступить проще, запустить только
одного бегуна и не устанавливать его в качестве службы. Точнее служба
будет создана и запущена сразу после установки её нужно отключить, по тем же
причинам, по которым отключали и 1С:Предприятие – запускаемым файлам 1C требуется GUI.
1.
sudo
systemctl disable gitlab-runner
2.
sudo
systemctl stop gitlab-runner
3. gitlab
-runner
register_
4. Теперь открываем наш проект в gitlab и перейдём в раздел Settings-CI/CD-Runners
evgeniy@Ubuntu-VM2:~$ gitlab-runner register
Runtime platform arch=amd64 os=linux pid=21329 revision=4c96e5ad version=12.9.0
WARNING: Running in
user-mode.
WARNING: The user-mode
requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://Ubuntu-GLS/
Please enter the gitlab-ci token for this runner:
GR1348941n6Epz2b-RuXWqtJ2Tp4P
Please enter the gitlab-ci description for this runner:
[Ubuntu-VM2]: DemoAM-runner
Please enter the gitlab-ci tags for this runner (comma separated):
build, convertation, gui-command,
update
Registering runner...
succeeded
runner=GR134894
Please enter the
executor: docker-ssh, parallels, shell, ssh, kubernetes, custom, docker, virtualbox, docker+machine, docker-ssh+machine:
shell
Runner registered
successfully. Feel free to start it, but if it's running already the config
should be automatically reloaded!
evgeniy@Ubuntu-VM2:~$
5.
В процессе регистрации бегун в каталоге ~/.gitlab-runner/ создаст конфигурационный файл config.toml, в нём нужно исправить
параметр:
concurrent = 6
это означает количество параллельно исполняемых заданий. Запускаем:
evgeniy@Ubuntu-VM2:~$
gitlab-runner run
Runtime platform arch=amd64 os=linux pid=22539
revision=4c96e5ad version=12.9.0
Starting multi-runner
from /home/evgeniy/.gitlab-runner/config.toml...
builds=0
WARNING: Running in
user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
Configuration
loaded
builds=0
listen_address not defined, metrics
& debug endpoints disabled builds=0
[session_server].listen_address
not defined, session endpoints disabled
builds=0
7.
Далее,
необходимо установить несколько переменных окружения в разделе Settings-CI/CD-Variables, они
есть в тексте сборочной линии в этапе StagesAndVariables:
# Переменные ниже должны быть определены на сервере сборки
#L_PLATFORM_1C: '/opt/1C/v8.3.17-1549/x86_64/1cv8' # Путь к запускаемому толстому клиенту Linux
#L_PLATFORM_1C_tc:
'/opt/1C/v8.3.17-1549/x86_64/1cv8c' # Путь к
запускаемому тонкому клиенту Linux
# Переменные ниже могут быть определены на сервере сборки
#CI_DEBUG_TRACE: 'true'
Я определю только те, которые
нужны сейчас - пути к платформе, вы можете ещё и отладку включить:
8.
Осталось последнее, настроить веб хуки gitlab,
для этого перейдём в раздел Settings-Webhooks, и
вставим ссылку на второй HTTP сервис СППР http://linux.xn--e1agfaq7azal4a.xn--p1ai/DemoAM/hs/BS/file.json
, где подчёркнутую часть ссылки Вам нужно заменить на свой веб сервер:
9.
Добавьте пользователя, под которым заходите в СППР в раздел
уведомлений для ветки master (иначе не получите
уведомлений от бота о сборке):
10.
Далее, переходим в gitlab, раздел
CI/CD-Pipelines и запускаем сборочную линию, на видео
процесс будет немного быстрее. чем у вас первый раз,
так как первый раз заполняется кэш хранилища бегуна, кэш метаданных для утилиты
ring в каталоге сборки. На видео собирается
параллельно 3 ветки, но вам рекомендую начат сборку с какой нибудь одной. Пример запуска взят из варианта установки для Windows.
7. Сейчас
у ИБ для ветки версии и ветки тестирования не включён флаг копирования ИБ
перед сборкой из родителя, в этом случае, прежде чем ваша база будет обновлена,
допустим это ветка тестирования, из ветки версии будет скопирована ИБ с самыми
свежими "тестовыми примерами" (ошибками), а затем этот клон будет
обновлён до конфигурации ветки тестирования, тогда в сборочную линию добавится
ещё один этап, копирование:
8. Разница
в длительности сборки не большая - 30 секунд, на больших ИБ может
достигать десятки минут, 50 Гб - ~6 минут. Такой подход позволяет, быстро
получить с продуктивного контура копию ИБ, накатив на неё ветку версии с
выполненными задачами и проверить работоспособность функционала на свежих
данных. Ещё одна выгода - в продуктивном контуре отладка как правило отключена,
а ветка версии всегда в тестовом контуре, где отладка включена. Идеальный
вариант делать такие сборки до начала рабочего дня (по расписанию). То же самое
с веткой тестирования, её как правило собирают два раза в сутки, один раз в
ночь, второй раз в обед (так же по расписанию). Ну и всегда можно запустить
сборку по требованию - из веб интерфейса.
7.
На этом настройка демонстрационного контура базы закончена.