Использование vanessa-runner/deployka в сборочных линиях Jenkins
Библиотеки (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
Вот и добрались до скрипта.