Друзья, доброго времени суток.
Честно говоря, уже устал поддерживать версии приложений на серверах и делать изменения в БД врукопашную. Использую свои скрипты установки — те же программы, за которыми тоже надо следить самому и править в разных обстоятельствах, типа добавления нового сервера или подготовки новой виртуалки тестировщикам. Захотелось посмотреть, какие есть цивилизованные решения для таких задач. Хочу поделиться первым опытом работы в среде автоматизации процесса развертывания софта – 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 скрипта:
Пока мой пример слишком простой, чтобы что-то рекомендовать или оценивать пригодность подхода.
Что еще надо попробовать:
Посмотреть на красивые картинки, почитать описание производителя и скачать всё это добро можно здесь.
Собственно, на этом всё. Надеюсь, тема автоматизации процессов развертывания кому-то интересна. Задавайте, пожалуйста, вопросы в комментариях. Очень интересно, что вы об этом думаете.
Честно говоря, уже устал поддерживать версии приложений на серверах и делать изменения в БД врукопашную. Использую свои скрипты установки — те же программы, за которыми тоже надо следить самому и править в разных обстоятельствах, типа добавления нового сервера или подготовки новой виртуалки тестировщикам. Захотелось посмотреть, какие есть цивилизованные решения для таких задач. Хочу поделиться первым опытом работы в среде автоматизации процесса развертывания софта – 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) и восстановление предыдущей версии
- Попробовать запустить тесты после развертывания
Посмотреть на красивые картинки, почитать описание производителя и скачать всё это добро можно здесь.
Собственно, на этом всё. Надеюсь, тема автоматизации процессов развертывания кому-то интересна. Задавайте, пожалуйста, вопросы в комментариях. Очень интересно, что вы об этом думаете.