Друзья, доброго времени суток.

Честно говоря, уже устал поддерживать версии приложений на серверах и делать изменения в БД врукопашную. Использую свои скрипты установки — те же программы, за которыми тоже надо следить самому и править в разных обстоятельствах, типа добавления нового сервера или подготовки новой виртуалки тестировщикам. Захотелось посмотреть, какие есть цивилизованные решения для таких задач. Хочу поделиться первым опытом работы в среде автоматизации процесса развертывания софта – Serena Deployment Automation (SDA) — продукт бесплатен при условии использования на не более 5 серверах.



Используя SDA, можно автоматизировать и объединить под одной «крышей» такие операции как:

1. Получение исходного кода из различных источников – файловая система, среды версионного контроля (Git, Subversion и т.д.)
2. Сборка кода через интеграцию с Jenkins, Apache Maven и т.д.
3. Моделирование сценариев доставки и установки изменений для всего приложения или его отдельных компонент. Сюда могут быть включены как простые задачи, вроде переноса файлов, так и более сложные, типа запуска скриптов обновления данных в БД, установки веб-приложений на IIS, Aphache и другие веб-сервера, запуск различных скриптов, снятие снэпшотов виртуальных машин, запуск тестов после установки и т.д.
4. Ручной и отложенный запуск развертывания, отслеживание прогресса установки, просмотр логов.
5. Последовательная или параллельная установка на несколько сред (например, на тестовую и боевую или на несколько боевых).

И так далее. Возможности достаточно обширны. Важно, что абсолютно вся настройка происходит через общий веб-интерфейс системы.

Я начну с создания процесса развертывания небольшого ASPX-отчета. Отчет выдает информацию из базы данных на MS SQL и хостится на веб-сервере IIS. Также у нас есть SQL Update скрипт для обновления данных, который нужно выполнить после установки свежей версии.

Начнем с того, что настроим получение кода из репозитория Git’a. Для этого создадим новую компоненту, дадим ей имя, укажем ветку и путь к клиенту Git:



В отдельном репозитории хранятся SQL скрипты. Аналогичным образом создадим для них компоненту.

Далее переходим к описанию процесса установки каждой компоненты. Процесс установки aspx-отчета представлен ниже:



Первый шаг загружает все артефакты (файлы) в нужную мне директорию на сервере, второй шаг перезапускает веб-сервер через команду строку.

Список доступных операций по взаимодействию с различными системами определяется используемыми плагинами. В состав SDA их входит порядка 80-ти штук. Если интересно, с полным списком можно ознакомится здесь.

Отдельный процесс описывает запуск SQL скриптов. Схема похожая – скрипты загружаются на сервер и затем запускаются (через sqlcmd):



Каким образом SDA осуществляет все эти действия на удаленном сервере? Через отдельную программу-агента, доступную для различных платформ. Т.е. агента SDA нужно установить на сервер. Иногда это невозможно. В этом случае используется так называемая «agentless» конфигурация, когда развертывание происходит без участия агентов. Типичный сценарий — подключаемся к серверу по SSH, из командной строки запускаем команды обновления исходных файлов с того же Git, копируем файлы в нужные папки, перезапускаем процессы, если надо. Это прямой ход развития событий. И везде нужно проверять, что есть место на диске, что все файлы получены, что всё нормально скопировалось куда надо и т.д. и т.п. И предусмотреть действия по откату и зачистке сервера после своих действий.

Объединяющим элементом будет конфигурационный объект, который в системе называется «Application». Создадим такой и начнём его настройку с добавления наших компонент:



Далее настроим окружение (слово «окружение» здесь больше подходит, т.к. серверов может быть много), на котором будем проводить развертывание:



И последнее. Создадим процесс, объединяющий процедуры установки обоих наших компонент (application process):



На этом всё, теперь запустим процесс. Можно отслеживать состояние развертывания в режиме real-time:



Или посмотреть результаты после завершения:



Внутри каждого шага хранятся логи выполнения. Если что-то пошло не так, это сразу будет видно. Например, вот логи выполнения SQL-update скрипта:



Заключение


Пока мой пример слишком простой, чтобы что-то рекомендовать или оценивать пригодность подхода.
Что еще надо попробовать:

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

Посмотреть на красивые картинки, почитать описание производителя и скачать всё это добро можно здесь.

Собственно, на этом всё. Надеюсь, тема автоматизации процессов развертывания кому-то интересна. Задавайте, пожалуйста, вопросы в комментариях. Очень интересно, что вы об этом думаете.

Комментарии (4)