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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.3 1С 8.5 Бесплатно (free)

В прошлой статье у ERP оставалось 89 отказов загрузки, у ЗУП — 19. Теперь обе конфигурации совпали с эталонами, а собранные файлы прошли круг через платформу. Развертка выделена в открытый репозиторий cf-unwrapper: библиотека на Rust и консольная утилита. Показываю результаты, объясняю границы «100%» и приглашаю к проверкам и развитию проекта.

02.11.2026    226    oyti    1    

1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

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

02.11.2026    451    vanya_gonchar    2    

4

Файловый обмен (TXT, XML, DBF), FTP DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.5 Бесплатно (free)

В прошлой статье я выгрузил Бухгалтерию в XML байт в байт и спросил, на чем проверить дальше. Вы ответили: ERP, старые релизы, зарплата. Прогнал пять конфигураций, от клиента ЭДО до ERP на 120 тысяч файлов. Рассказываю, что сломалось после Бухгалтерии, почему эталону платформы нельзя верить на слово, как выгрузить одну конфигурацию в формат трех версий платформы - и почему cf-конвертер становится отдельным продуктом, Разверткой.

02.11.2026    299    oyti    2    

3

Инструментарий разработчика DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Как отличить срочное исправление от обычного вечернего коммита? Проверила расчёт показателей поставок по отчёту хранилища 1С и истории двух открытых проектов. На стенде счётчики совпали со сценарием, а в выборке открытого проекта правило «те же объекты» ошиблось во всех шести случаях. Показываю границы такого замера и отличие от метрик DORA. Прилагаются инструмент и материалы опыта.

1 стартмани

29.10.2026    284    Ninel_S    0    

0

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    875    oyti    20    

16

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

Хук pre-commit проверяет полный снимок индекса Git в отдельной базе 1С. На «Нано-УТ» и платформе 8.3.27 повторила 12 попыток коммита: восемь прошли, четыре остановлены. Чистый коммит занял 31,8 с. Вызов несуществующего метода общего модуля хук останавливает только с ключом -ExtendedModulesCheck. В архиве версия 2, тесты, инструкция и журналы.

1 стартмани

26.10.2026    324    Ninel_S    2    

-1

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Я дала агенту Claude Code задачу словами: добавить в учебную конфигурацию документ «Внутреннее потребление товаров», который списывает товар по средней стоимости и не даёт уйти в минус. Три запуска с нуля, каждый принят проверкой на платформе 1С: 1 мин 49 с, 2 мин 33 с и 2 мин 56 с. Показываю, что агент поменял, где ошибался и почему на типовой УТ так быстро не будет.

1 стартмани

26.10.2026    586    Ninel_S    0    

-1

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Бесплатно (free)

ИИ пишет код на 1С все быстрее, а разработчик по-прежнему носит вопросы, ответы и статусы между чатом с агентом, аналитиком и архитектором. Показываю другой подход и демо-стенд: задача из Яндекс Трекера сама идет по этапам, ИИ-агент работает в GitLab CI, а люди только утверждают спецификацию, архитектуру, план и код. Живой пример задачи от заявки до merge, честный отказ агента, права агента, время и стоимость: вся задача обошлась в 68 центов.

22.10.2026    706    maxrubtsoff    1    

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

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

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