Не кочегары мы не плотники… А мы программеры-работники, да. И устанавливаем приложения на серверы нескольких сред

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

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

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

    Собственно, на этом всё. Надеюсь, тема автоматизации процессов развертывания кому-то интересна. Задавайте, пожалуйста, вопросы в комментариях. Очень интересно, что вы об этом думаете.
    • +9
    • 10,3k
    • 4
    Softmart
    0,00
    Компания
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

      0
      <srczm>Вижу конфликт заголовка и КДПВ. К тексту гимна не ставят флаг страны вероятного противника.</srczm>
      По теме: если вы хотели подробно рассказать про какой-то процесс без детального текстового описания, то на скринах следует выделять шаги. А так просто картинки из веб интерфейса.
        0
        Спасибо. Замечания приму к сведению. На хабре новичок, буду стараться :)
        0
        Думаю, что без автоматизации никуда. Сам использую связку TFS + Release Management. Сначала показалось, что дюже тяжело все там, но когда чуть разобрался — разворачиваю и Win Service, сайты, просто копирую туда-сюда данные. Но SQL не трогал, в основном в ручную обновляю, но и это можно там делать элементарно. Просто руки еще не дошли. Хотел было делать бекап базы перед развертыванием всегда, но потом как-то подзабыл. Но, при этом, наличие агента для таких действий установленного на месте развертывания — обязательно. А агент — лишняя дырка.
          0
          А TFS обладает возможностями для автоматизации развертывания? Или это какая-то надстройка к нему?
          А Release Management чей?

          По агенту — спору нет, сложности возникают. Во первых нужно его устанавливать и настраивать, а во вторых — прорезать порт для взаимодействия (если сервер за брандмауэром). Но зато и возможности расширяются многократно.

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

        Самое читаемое