Использование 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

См. также

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

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

2400 руб.

04.07.2022    10674    43    1    

34

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

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

3360 руб.

05.08.2024    3554    19    1    

13

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

Облачные технологии и DevOps кардинально меняют подход к разработке на платформе 1С:Предприятие. Делимся реальным опытом построения CI/CD-конвейера в GitLab: от сборки и тестирования с YAxUnit и Vanessa Automation до интеграции с SonarQube и безопасного развертывания в продакшен. Вы узнаете, как с помощью Docker и автоматизации превратить рутину в предсказуемый и надежный процесс, сократив риски и освободив время для решений, которые действительно требуют вашего профессионализма.

18.08.2025    1519    ComboBoy    0    

5

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

Задумывались ли вы, сколько времени разработчики тратят не на код, а на рутинные действия – от настройки окружения до поиска ответственных и документации? Эта статья о том, как найти и устранить «ерунду», которая тормозит процесс и раздражает на каждом этапе разработки. Разбираемся, как с помощью автоматизации, чек-листов и правильных процессов сделать разработку комфортной, эффективной и даже приятной.

18.08.2025    3663    mrXoxot    1    

18

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

Так сложилось, что чаще всего для целей CI/CD в проектах 1С применяется Jenkins и чуть реже GitLab CI. Но существует множество других решений для построения сборочных контуров. Ниже речь пойдет о применении решения Azure DevOps в проектах на 1С. В основе – реальный кейс, шаблоны, инструменты и собственные расширения.

15.08.2025    1435    ktb    0    

10

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

Когда в компании используется более 500 внешних обработок для 20 различных баз, процесс их параллельной разработки превращается в борьбу. Расскажем о тернистом пути от ручных скриптов к масштабируемой DevOps-системе, позволяющей централизованно управлять внешними обработками, автоматизировать сборки, интегрироваться с таск-трекером, запускать автотесты и разворачивать окружение в пару кликов.

12.08.2025    5272    untru    13    

22

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

Дорогой дневник, мне не подобрать слов, чтобы описать боль и унижение, которые я испытал за последнее время, моя жизнь никогда не будет прежней... мне не удалось найти механизма поставки расширения конфигурации... но зато я научился это делать с помощью команд запуска "1С:Предприятие" и GIT...

1 стартмани

29.07.2025    2860    3    gorsheninsn    6    

27

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

Цель статьи – показать, что DevOps можно внедрять в проектах любого масштаба, даже с ограниченными ресурсами. Автор делится личным опытом: рассказывает, как начиналось внедрение, какие ресурсы потребовались, какие задачи удалось решить и как организован текущий рабочий процесс. Вы узнаете, как DevOps-практики помогают участникам разработки и чем DevOps-инженеры полезны для всех, кто участвует в создании решений. В статье подробно разбираются преимущества, которые дал переход на EDT, его влияние на процессы сборки, а также анализируется опыт внедрения Kubernetes – что это уже принесло и что принесет в будущем.

11.07.2025    2291    ptica    0    

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

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

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