Использование vanessa-runner/deployka в сборочных линиях Jenkins

26.03.20

Разработка - DevOps и автоматизация разработки

Библиотеки (shared-libraries) для Jenkins, пример сборочной линии.

Предисловие

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

К тому времени я уже знал о существовании команды Silverbulleters, их продукту OScript и всяческим библиотекам. Как узнал про Jenkins - уже и не помню.

Собственно, вот, решил написать сборочную линию (pipeline) для обновления конфигурации из хранилища. Для тренировки ООП написал библиотеку-обертку для Деплойки (deployka). Потом эту библиотеку расширил под функционал vanessa-runner. При этом, код скрипта pipeline получился более низкоуровневым и более многобуквенным, чем это было в виденных примерах. И, в виду того, что разработка началась с реализации под Деплойку, настройки pipeline задаются через ее параметры (а в vanessa-runner это уже можно задать настроечным json-файлом). Также, в скрипте pipeline присутствует некоторое количество хардкода.

Данная статься НЕ является полным руководством по созданию и настройке pipeline. Буду описывать лишь свой вариант реализации. Мда, и этот свой вариант субъективно оцениваю на 4-с-минусом;)

Общий алгоритм и краткое описание действий

Сборочная линия имеет следующие стадии.

Инициализация

  • Загружаем из git библиотеку vanessa-runner.
  • Загружаем из git служебную внешнюю обработку.
  • Создаем и инициализируем объекты-обертки vanessa-runner. Таких объектов создается - два. Один будет обслуживать конфигурацию тестового контура, другой - конфигурацию рабочего контура.

Проверка необходимых ресурсов

  • Проверяем доступность каталога хранилища
  • Проверяем доступность каталога бакапов
  • Пробуем запускать тестовую и рабочую конфигурации в режиме 1С:Предприятие.

Проверка наличия бакапа

  • Проверяем наличие актуального бакапа

В настройках задается каталог, куда заданием (job) SQL-сервера копируются бакапы. В этом каталоге смотрим, есть ли актуальный по дате/времени создания бакап. 

Процесс можно пропустить настройками.

Обновление тестовой БД

  • Обновляем из хранилища тестовую БД

Процессы обновления тестовой и рабочей БД - проходят почти идентично. Разница лишь в том, что при обновлении рабочей БД происходит ожидание завершения фоновых заданий.

Обновление рабочей БД

  • Обновляем из хранилища рабочую БД

Процесс можно пропустить настройками. Иногда в тестовых целях перенастраивал и пропускал этот шаг - например, для проверки работы измененного скрипта pipeline или какой-то его служебной библиотеки.

Выгрузка конфигурации

  • Выгружаем конфигурацию (cf) из обновленной рабочей БД.

Процесс можно пропустить настройками.

Используемые модули и библиотеки

Служебная внешняя обработка

Это внешка по мотивам древней версии обработки ЗакрытьПредприятие из комплекта vanessa-runner. Дописал во внешке, чтобы она выводила в лог работы 1С:Предприятия состояние конфигурации (соответствует ли она конфигурации БД), имя конфигурации и версию. И еще внешка умеет запускать обновление метаданных при наличии нужного ключа запуска Предприятия. Используется при выполнении команд vanessa-runner.

Репозиторий тут.

Библиотека CommonUse

Это подключаемая библиотека (shared library) для Jenkins. Содержит ряд вспомогательных методов и объектов для сокращения кода основного скрипта. Например, тут есть объекты для специализированных действий с датами (DateNow) и папками (Folder), хелперы для их создания.

Репозиторий тут.

Библиотека deployka-helper

Это объектно-ориентированная обертка для запуска команд deployka и vanessa-runner. Это классы DeploykaHelper и VanRunnerHelper, наследуются от OScriptHelper. 

На момент реализации, в Jenkins были некие проблемы с запуском командной строки - как-то неустойчиво работало. Наблюдались запуски без завершения процесса. Поэтому в библиотеке реализована своя запускалка скрипта. Корявенькая, надо сказать. Но работает и не дает повода заняться ее перепиской:)

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

По идеологии этих библиотек, они выполняют какие-то команды. И при этом, до и после выполнения какой-то команды осуществляют вызов замыкания - процедуры, объявленной в скрипте pipeline. Таким вот образом скрипт узнает о намерениях и результатах выполнения команды.

Репозиторий тут.

Скрипт pipeline

Вот и добрались до скрипта.

 
 Скрипт

Одна из важных вещей, но и неважнецки сделанных, - это как раз тот метод, обслуживающий DeploykaHelper, который прочитывает намерения и результаты выполнения команд. Поначалу код был еще хуже. Этот вариант не трогаю - ибо работает стабильно. Это про метод скрипта runnerNotifyHandler.

Результаты выполнения скрипта пишутся в лог. Затем полный лог высылается почтой - для этого используются встроенные возможности Jenkins. Также, происходит краткое оповещение Телеграмом. Для telegram использую специальный job с вызовом cURL, чтобы использовать анонимайзер. Если кому интересно будет - допишу подробнее.

Параметризация скрипта выполняется заданием пар ключ-значение - в Jenkins за это отвечает плагин Environment Injector Plugin.

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

 
 Переменные скрипта

Заключение

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

Буду рад, если кому-то что-то пригодится. Но, пока что, поддерживать и развивать эти наработки я не планирую. Возможно, через пол-года будет следующий этап развития - будет пред-продакшн для нашей свежей самодельной конфигурации, где уже с самого начала пишем авто-тесты (пока только модульные, не фичи). Может и раньше бы этим занялся, но не осилил поднять slave-Jenkins через DCOM. А повышать текущую нагрузку - не хочется (ибо это неправильно).

Кстати, чем еще у нас занят Jenkins:

  • Ежеутренне проверяет доступность и не-модифицированность рабочих БД
  • Выгружает cf для определенного списка конфигураций с хранением N последних версий
  • Выгружает хранилища в местный git
  • Выгружает в Elastic текущую статистику баз данных - работающие сеансы и их характеристики. Т.е., примерно то, что отображается в Администрировании серверов 1С, при просмотре сеансов для БД.

Желаю всем удачной автоматизации!

Jenkins vanessa-runner OScript pipeline groovy

См. также

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.15.111.

2220 руб.

04.07.2022    6726    26    0    

23

Системы контроля версий для 1С-разработчиков.

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

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9144    78    4    

110

Автотесты для типовых конфигураций Бухгалтерия предприятия КОРП 3.0 и Бухгалтерия предприятия 3.0 (vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.144.49.

1728 руб.

20.01.2022    6590    10    0    

9

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

2 стартмани

08.05.2019    24215    54    VPanin56    26    

26

1С, СППР и Архитектура как код

DevOps и автоматизация разработки Бесплатно (free)

Можно ли идеи подхода «Архитектура как код» положить на 1С или иную платформу, чтобы не изобретать ещё какой-то язык и сразу получить множество готовых библиотек функций и инструмент достижения главной цели подхода AaC.

01.02.2024    2463    roman72    9    

7

TCP прокси-сервер хранилища конфигурации 1С

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

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2775    kamisov    17    

57

Infrastructure as code: кнопка «Сделать всё», или Упаковываем наше окружение в 5 кБ текста

DevOps и автоматизация разработки Бесплатно (free)

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

01.11.2023    1325    Libelle    5    

13

Обработка для подготовки файла настройки дымовых тестов измененных объектов конфигурации

DevOps и автоматизация разработки Тестирование QA Россия Абонемент ($m)

В статье приведен пример обработки, которая на основании измененных файлов git-репозитория готовит специальный файл настройки xUnitParams.json для последующего выполнения дымовых тестов (xUnitFor1C/add) только для измененных объектов конфигурации

1 стартмани

09.10.2023    707    4    ICL-Soft    0    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1448 15.05.20 09:22 Сейчас в теме
Интересная статья, а почему-то нет ни одного комментария.
2. artbear 1448 15.05.20 09:24 Сейчас в теме
(0) Может быть, добавим твою внешнюю обработку в Ванесса-раннер

сделаешь пулл-реквест?

я правильно понимаю, что она работает только в конфигурацияюх, основанных на БСП, верно?
3. ImHunter 312 15.05.20 09:54 Сейчас в теме
(2) Постараюсь. Допишу в вашу же обработку. Можно будет и в конфигурациях без БСП использовать.
В нее же еще можно докинуть функционал для убирания окна сообщения о том, что база перемещена.
Оставьте свое сообщение