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

Публикация № 1211686

Методология - DevOps - Jenkins

Jenkins vanessa-runner OScript pipeline groovy

Библиотеки (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С, при просмотре сеансов для БД.

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

Специальные предложения

Оставьте свое сообщение

См. также

Визуализация фич Vanessa Automation в StoryMapper

Статья Программист Нет файла ИТ-компания 1С:Франчайзи, автоматизация бизнеса Бесплатно (free) Agile (XP, SCRUM, Канбан) Сценарное тестирование Vanessa Automation

Описан процесс визуального упорядочивания коллекции feature-файлов в виде карты пользовательских историй. Используется инструмент гибкого управления требованиями StoryMapper.

21.03.2020    1284    oleynik.dv    7       

Готовые переносы данных из различных конфигураций 1C Промо

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

Jenkins: конфигурируем сервер и подключаем к нему виртуальные машины. Цикл "Многопоточный CI для 1С c Packer, Vagrant и Jenkins", часть 4

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) DevOps CI/CD Jenkins

Выполним основные настройки Jenkins как CI-сервера. Подключим к нему развёрнутые через Vagrant виртуальные машины в качестве сборочных узлов.

13.03.2020    1898    Vladimir Litvinenko    6       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Vanessa Automation + СППР

Статья Программист Нет файла v8 Бесплатно (free) Vanessa Automation СППР

Vanessa Automation. Использование автоматизированного тестирования в СППР.

07.11.2019    7560    SvVik    14       

Vanessa, улучшаем инструкции

Статья Бизнес-аналитик Пользователь Руководитель проекта Нет файла v8 1cv8.cf Windows Бесплатно (free) Vanessa Automation

Vanessa Automation умеет делать хорошие инструкции, давайте посмотрим, какие инструменты для этого есть.

30.10.2019    5627    OPM    4       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Vanessa, хочу все и сразу

Статья Программист Бизнес-аналитик Руководитель проекта Нет файла v8 Бесплатно (free) Vanessa Automation

Vanessa Automation это инструмент для тестирования прикладных решений на платформе 1С, но он/она может больше, чем только тестирование.

11.10.2019    7593    OPM    12       

Сказ про то, как я DevOps-ом занимался (OneScript, Deployka, Jenkins)

Статья Системный администратор Программист Нет файла v8 1cv8.cf ИТ-компания Бесплатно (free) OneScript DevOps Jenkins

Решаем задачу: автоматизировать обновление тестовых баз 1С из хранилища конфигурации при появлении в нём новых изменений. Данная статья родилась в муках хождения по граблям и поиска безопасного форватора среди подводных камней. Изложение постарался представить в виде инструкции для новичка, в которой собрал всё, с чем пришлось столкнуться. Сам я не DevOps-ер, ни на что не претендую, просто делюсь опытом :)

17.06.2018    19131    stas_ganiev    33