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

Екатеринбург.Online: Голосование продолжается Промо

Продолжается голосование за доклады на INFOSTART MEETUP Екатеринбург.Online! Лучшие из них попадут в окончательную программу онлайн-митапа! Присоединяйтесь к голосованию и покупайте билеты - 3 000 рублей за 8 часов продуктивной пятницы!

3000

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

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

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

13.03.2020    1972    Vladimir Litvinenko    6       

DevOps для 1С. Онлайн-курс проходит с 16 апреля по 11 июня 2020 года. Промо

Данный онлайн-курс предусматривает изучение процессов DevOps, их применение при разработке на платформе 1С. В результате прохождения онлайн-курса вы сможете: настроить ПО необходимое для проведения проверок и тестирования, создавать сценарии тестирования и объединять их в комплексные процессы, создавать скрипты для автоматизации процессов DevOps.

12000 рублей

Vanessa Automation + СППР

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

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

07.11.2019    7686    SvVik    14       

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

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

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

30.10.2019    5693    OPM    4       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

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

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

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

11.10.2019    7665    OPM    12       

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

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

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

17.06.2018    19199    stas_ganiev    33