Почему Мы Используем Классический Монолит Windows В 2020 Году И Как Мы Ускорили Доставку В Него Изменений?

Добрый день, коллеги! Разрешите представиться — меня зовут Павел Бацев, я администратор сервиса ГК «Спортмастер».

Я занимаюсь системным администрированием 8 лет и уже второй год изучаю и внедряю devops-практики.

Сегодня предлагаю рассмотреть случай, который, в первую очередь, будет интересен администраторам и инженерам с парком Windows-хостов и монолитных систем.

Под катом: некоторые особенности конвейера доставки, работающего с использованием бамбуковых оконных агентов; проблемы, возникающие при использовании сеансов dsc и jea powershell в домене с устаревшим уровнем леса, и их решения; способ реализовать автоматическое тестирование пользовательского интерфейса без привлечения профессиональных тестировщиков.

Итак, посмотрим на исходные данные: У нас имеется критически важная для бизнеса информационная система, интегрированная с системой внутреннего документооборота, прикладной системой «Горячая линия Сервиса», 1С.

На момент поступления системы на поддержку у нас не было стратегии выпуска, поэтому все операции, связанные с обновлением того или иного компонента, выполнялись вручную, зоны ответственности были распределены, а четкой, взаимодополняющей работы между команды разработки, администрирования и аналитики (в качестве представителя бизнеса).

Рассматриваемая система имеет классическую монолитную архитектуру и состоит из:

  • Базы данных – MS SQL;
  • Веб-серверы – IIS;
  • Веб-сервис – IIS;
  • Планировщик рутинных задач – Служба Windows;
  • Кэш — Redis, как служба Windows.
Как вы понимаете, это система, в которой может произойти полная потеря функциональности при выходе из строя любого из компонентов.

Это очень затрудняет гибкость в подходе и частоте внесения изменений.

На основе рутинных задач были выявлены операции, требующие автоматизации и выполнения в рамках одного конвейера, а также учтен задел для последующих разработок:

  • Доставка сборок (сгенерированных артефактов) на целевые хосты веб-серверов;
  • Кастомизация сборок путем редактирования файлов контента, параметров макета, адресов сторонних плагинов и т.д.
  • Выполнение скриптов миграции утилитой (набором bat/ps скриптов) от разработчика, расположенной в теле сборки;
  • Организация правильной последовательности запуска системы;
  • Легкий откат при возникновении проблем с конвейером или ошибок кода.

  • Масштабируемость исполнения (с ростом бамбуковых агентов, увеличением количества целевых цепей/хостов и т.д.) и унификация для различных схем (dev, test, stage, prod);
  • Использование вычислительной мощности бамбуковых агентов;
  • Вывод полного и читаемого лога выполнения всех шагов в ui бамбуке;
  • Организация возможности запуска конвейера и первоначальной диагностики возникающих проблем командой аналитиков, а не техническим экспертом и т.п.

  • Реализация системы оповещения о результатах выполнения конвейера в удобном для бизнеса инструменте: выбор пал на телеграм-канал (самая простая реализация чатопса).

В нашей компании внедрены различные инструменты, позволяющие внедрять практики DevOps. На момент моего вступления на должность администратора сервиса наиболее развитым и способным покрывать поставленные задачи был стек от Atlassian, поэтому конвейер было решено реализовать с помощью комбинации jira+bitbucket+bamboo. Поскольку в обслуживаемой системе используется ОС Windows Server, а имевшийся на тот момент пул бамбуковых агентов находился на *nix, возникла идея протестировать работу кроссплатформенного взаимодействия.

Все было нормально, ядро powershell, установленное на *nix-агентах, работало нормально, но при тестировании сетевого взаимодействия возникла проблема — не обрабатывался второй тап аутентификации между хостами Windows.

Какие решения рассматривались?

Это то, что мы попробовали.

Обсудив с коллегами предложенные варианты, мы решили реализовать определенное количество бамбуковых агентов на Windows, что позволило унифицировать платформу агента и целевой системы, исключить длительную исследовательскую деятельность, а также защитить от возможных проявлений скрытых проблем.

во время кросс-платформенной работы инструментов ci/cd. Реализация конвейера доставки изменений на основе бамбуковых агентов на базе Windows прошла не без сложностей, но и проблем нет. Собственно, вот они:

  • Текущий лес объявлений не поддерживает групповые управляемые учетные записи служб (gMSA);
  • при использовании встроенного плагина бамбука для обработки скриптов «Script» и хранения скриптов в VCS при получении ошибок Powershell встроенный интерпретатор бамбука их не воспринимал и выполнял задачи\задачи\шаги\планы как успешные;
  • Сторонний плагин «Parse Log Task» для простого анализа ошибок на основе заданных шаблонов невозможно было добавить в задачи «Проекты развертывания».



Реализованный конвейер

Давайте рассмотрим общую концепцию, инструменты и некоторые возможности.



Система контроля версий

В качестве VCS используется Bitbucket, но поскольку используется программное обеспечение с закрытым исходным кодом, в VCS хранится только набор (скрипты и конфиги) для нормальной работы конвейера.

Хранение скриптов конвейера организовано в одном репозитории; контуры/тип трубопровода разделены ответвлениями.

Структура папок для всех бранчей едина.



Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?



CI/CD

Реализация всех процессов CI/CD сводится к реализации бамбукового плана сборки по причинам, выявленным в процессе разработки концепции и наличию некоторых недостатков в инструментарии Atlassian.

Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

Все шаги унифицированы и представляют собой задачу, разделенную на несколько простых задач.

Давайте рассмотрим пример шага «Сборка».

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

Да, отмечу, что при реализации всех шагов конвейера используется инструментарий powershell. В частности ДСК И хеа .

А поскольку возникла проблема с использованием gMSA, мы разработали концепцию использования временных шаров, срок службы которых ограничен временем выполнения конвейерной задачи.

Здесь появляются задачи с характерными особенностями «TFP» и «DelShare»:

  • создание временной области на текущем агенте:
  • удаление временной области на текущем агенте.

В результате казалось бы простая задача разбивается на семь задач:
  1. получение кода сценария для бамбукового агента;
  2. создание временной области для хранения dsc;
  3. парсер результата задачи создания временного домена;
  4. выполнение основной смысловой задачи шага;
  5. результат парсера выполнения основной задачи;
  6. удаление временной области;
  7. парсер результата задачи по удалению временной области.

В рамках плана сборки мы создали зависимость для выполнения другого плана сборки для реализации оповещений в Telegram.

Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?



Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

Этот конвейер является базовым и разделен на планы ветвей каждого контура, чтобы минимизировать количество отдельных идентичных планов.

В дальнейших конвейерах мы улучшили шаблоны ошибок, именование тестов, доработали/переработали ps-скрипты и внесли другие полезные изменения.

Одним из результатов стал конвейер обновления версий платформы для продуктивный контур .

Также мы реализовали пайплайны, покрывающие другие типичные задачи: обновление сущностей базы данных с помощью собственной утилиты подрядчика или утилиты от redgate; автоматическое тестирование системы пользовательского интерфейса; обновление\добавление пользовательского контента js\css; перезапуск системы непроизводительного контура; уведомления в телеграм.

Написал инструкции для группы аналитиков и провел обучающие встречи по использованию инструментов CI/CD. Также мы разработали концепцию и протестировали выполнение пайплайнов для переходов бизнес-процессов в jira\deferred Task (не обязательно, так как заказчик хотел использовать ui бамбук).



Ближайшие планы

  • перенос хранилища сборок из сетевых ресурсов в Artifactory;
  • после обновления леса объявлений внедрение gMSA;
  • написание собственного бамбукового плагина для уведомлений в телеграмме;
  • написание собственного бамбукового плагина для анализа результатов выполнения ps-скриптов из файла.



Автотестирование без профессиональных тестировщиков

Теперь об успешно реализованном кейсе по разработке и внедрению UI-автотестов с минимальными трудозатратами и инструментальной квалификацией.

От предприятий были получены сценарии, описывающие бизнес-процессы, которые имели решающее значение для отслеживания.

В качестве инструментов мы взяли:

  • selenium ide — как доступная и удобная платформа для создания скелета автотеста с возможностью импорта в различные языки программирования;
  • selenium webdriver+node js+mocha — в виде пакета кроссплатформенных инструментов, подходящих под текущую конфигурацию и набор установленных плагинов в бамбуке;
  • бамбуковые агенты Windows — в качестве тестировщиков;
  • allure – как визуализатор бизнес-результатов, удобный и понятный;
  • телеграм-канал - вроде простейшей реализации чатапа.

Скелеты автотестов на основе бизнес-сценариев были записаны в Selenium ide.

Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

Скрипты были импортированы в js и модифицированы для работы с выбранным набором инструментов.

Полученные финальные скрипты для автотестирования пользовательского интерфейса были загружены в VCS и разбиты на контуры.



Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

После успешного завершения конвейер выпуска, в зависимости от схемы, запускает конвейер тестирования пользовательского интерфейса.

По завершении создается артефакт с подробным журналом выполнения.



Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

Все тесты завершены успешно

Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

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



Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

Все тесты завершены успешно

Почему мы используем классический монолит Windows в 2020 году и как мы ускорили доставку в него изменений?

Все или часть тестов не пройдены Затем знания были переданы команде аналитиков, которые на основе сформированных скелетов и завершенных скриптов автотестирования самостоятельно проводят доработку/разработку.

Это делает возможным:

  • исключить ненужные действия по настройке/проверке выполнения задач между администрацией и командой аналитики;
  • повысить вовлеченность команд в общий процесс внедрения devops-практик;
  • де-факто организовать прототип продуктовой команды;
  • ускорить выполнение бизнес-заданий.

Если вы столкнулись с чем-то подобным и используете монолитную систему Windows, поделитесь своим опытом внесения изменений.

Теги: #Windows #Разработка сайтов #DevOps #Анализ и проектирование систем #монолит #непрерывная поставка #непрерывная интеграция #Спортмастер

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.