В предыдущем посте я написал о Преимущества шаблона развертывания внедрения Как способ сократить время простоя применения во время развертывания. Проектирование приложения для соответствия этой шаблоне развертывания, возможно, намного проще, когда вы впервые его создаете, но с чего начинаете с существующего приложения, и как вы принимаете приложение и конвертируете его, чтобы использовать шаблон развертывания проката?
В этом посте я показываю вам, как преобразовать существующее приложение для использования шаблона развертывания в Octopus с помощью Детские шаги Анкет
В этом посте
- Приложение
- Последовательный процесс развертывания
- Преобразовать в процесс развертывания проката
- Масштабировать серверы
- Выбор балансировщика нагрузки
- Целевые бассейны балансировщика нагрузки
- Создать новый проект
- Преобразовать процесс развертывания Петклинического развертывания
- Переключиться на новую инфраструктуру
- Уборка
- Вывод
Приложение
Я собираюсь использовать Петлиновый В качестве примера и преобразовать процесс развертывания для приложения из той, которая выполняет шаги развертывания последовательно в осьминоге в процесс развертывания. Petclinic — это образец приложения Spring Boot, написанное на Java, в котором есть два основных компонента:
- Веб-фронт.
- База данных.
Я не объясняю, как построить петлиновое приложение в этом посте. Если вы новичок в создании заявок на Java, у нас есть ряд Руководства Это включает в себя пошаговые инструкции для настройки трубопроводов CI/CD для различных инструментов.
Как для последовательных, так и для процессов развертывания последовательных, применение Petclinic и Mysql База данных размещена в Google Cloud Анкет Вся инфраструктура, используемая в этих примерах, включая серверы, балансировщики нагрузки и базы данных, регулярно воссоздаются с использованием Операции Runbooks Анкет
Некоторые предостережения
Важно подчеркнуть, что этот пост не будет охватывать каждый элемент, необходимый для развертывания с нулевым временем. Это делает некоторые предположения о настройке приложения:
- База данных уже развернута в высокодоступной конфигурации. Для получения дополнительной информации о высокой доступности MySQL обратитесь к Документация Анкет
- Изменения в базе данных сделаны обратно и вперед, совместимым с использованием Пролет Анкет
- Любое требуемое состояние сеанса сохраняется, когда отдельный сервер развернут.
Последовательный процесс развертывания
Для развертывания, в которых вы не обеспокоены временем простоя приложения, осьминог обслуживает это, выполняя шаги последовательно один за другим, по умолчанию.
Начало триггер Также возможно настроить процесс развертывания для выполнения шагов в параллель Анкет Тем не менее, следует позаботиться о том, чтобы избежать ситуаций, когда шаги, проходящие параллельно, зависят друг от друга.
Существующее Петклиновое приложение моделируется с использованием этой методики последовательного развертывания. Процесс развертывания состоит из ряда ключевых шагов:
- A Ручное вмешательство Шаг утверждения для Производство Только окружающая среда.
- Миграция DB Flayway Шаблон сообщества Шаги для отображения состояния миграции и применения любых новых изменений в базе данных.
- Развертывание в Дикая красавица Шаг для петукланического веб-фронта.
Кроме того, процесс развертывания включает в себя шаги, которые будут публиковать сообщения в Слаб Канал с обновлениями прогрессии развертывания.
Полный процесс развертывания можно увидеть здесь:
После Создание релиза В Octopus вы можете увидеть пример последовательного развертывания в действии к Развитие Окружающая среда:
Шаги выполняются по одному, пока развертывание не будет завершено. Когда Развернуть Petclinic Web App Шаг запускается, приложение становится недоступным для обслуживания запросов пользователям.
Возможно, неудивительно, что инфраструктура, используемая в этих развертываниях (в соответствии с окружающей средой), выглядит так:
Это включает в себя:
- Одиночный Ubuntu Виртуальная машина размещена сервер приложений Wildfly.
- База данных MySQL, размещенная в Google Cloud SQL услуга.
Образец проекта осьминога Вы можете увидеть процесс развертывания Петклинического последовательного развертывания до Преобразование в процесс развертывания в нашем образцы экземпляра Анкет
Преобразовать в процесс развертывания проката
Теперь, когда мы увидели процесс развертывания для существующего приложения, нам сначала нужно решить, как будет выглядеть наша инфраструктура для процесса развертывания.
Масштабировать серверы
Чтобы сократить время простоя и по -прежнему обслуживать запросы для пользователей, нам необходимо увеличить количество используемых нами серверов. Нам также нужен балансер нагрузки, который мы можем использовать для управления тем, какие серверы доступны.
В предыдущем примере последовательного развертывания у нас была одна виртуальная машина на среду. Чтобы все было просто, мы сохраним инфраструктуру для Развитие среда такая же, как и раньше. Для Тест и Производство Окружающая среда, однако, инфраструктура будет выглядеть так:
Это включает в себя Общий Нагрузка балансировщика, и на этот раз два сервера приложений в каждой среде, подключаясь к базе данных MySQL, как и раньше.
После того, как вы создали свои новые серверы, вам также необходимо добавить их в осьминог в качестве нового Цели развертывания и отметьте их любым подходящим Целевые роли Анкет
Выбор балансировщика нагрузки
Существует много различных типов балансировщика нагрузки, но ключевым требованием для этого примера развертывания проката является возможность контролировать, какие серверы доступны для обслуживания трафика. По этой причине, и, как этот пример работает от Google Cloud, мы будем использовать Сетевая нагрузка балансировщика . Это дает способ добавить и удалить наши серверы из балансировщика нагрузки в рамках процесса развертывания, который мы увидим немного позже. Для получения дополнительной информации о настройке балансировщика сетевой нагрузки, пожалуйста, обратитесь к Документация Google Анкет
В этом примере балансировщик нагрузки разделен между Тест и Производство среда. Чтобы направить трафик в правильное место, в балансировщике нагрузки используется другой порт TCP для определения предполагаемой среды.
- Порт
8080
используется для трафика, предназначенного для Тест Окружающая среда. - Порт
80
используется для трафика, предназначенного для Производство Окружающая среда.
Целевые бассейны балансировщика нагрузки
Ранее пользователи получали доступ к Petclinic Web Front-End непосредственно на одной виртуальной машине. Здесь мы используем выделенные целевые пулы для Тест и Производство среда. A Целевой пул Имя, данное группе экземпляров виртуальных машин, размещенных в Google Cloud.
Создать новый проект
Чтобы изменить наш процесс развертывания и сохранить возможность последовательно развертывать Петклинические, нам необходимо создать новый проект. Один из способов достичь этого — клонирование существующий проект.
В существующем проекте, под Настройки , используйте меню переполнения (…) и выберите Клон :
- Дайте новый проект, который вы клонируете из оригинального проекта имя, просмотрите настройки, и когда вы удовлетворены, нажмите Сохранить :
Преобразовать процесс развертывания Петклинического развертывания
Далее мы преобразуем процесс развертывания самого проекта. Не весь процесс развертывания Петклинического развертывания естественным образом подходит для шаблона развертывания, и по этой причине мы сосредотачиваемся на веб-фронте Petclinic.
Выбор того, что преобразовать Важно решить для себя, какие элементы процесса развертывания вашего проекта должны быть преобразованы для использования шаблона развертывания. В определенных ситуациях это может сделать вещи труднее развернуть Анкет
Настройте развертывание проката
Чтобы преобразовать Развертывание Petcinic Web App Шаг к развертыванию, выполняем следующие действия:
- Откройте шаг в редакторе процесса развертывания, расширите раздел На целях в ролях и нажмите Настройте развертывание проката :
- В Развертывание в ролинге Опция, которая появляется, выберите Размер окна Анкет Я выбрал размер окна
1
Поскольку мы будем развертываться только до двух серверов на среду:
- Нажмите Сохранить обновить шаг развертывания.
Добавить шаги ребенка
Мы настроили развертывание проката, но оно еще не очень интеллектуально. В настоящее время процесс развертывает Petclinic для каждого сервера по одному, принимая каждый экземпляр приложения в автономном режиме по мере его развертывания.
Нам необходимо добавить новые шаги в нашу развертывание Rolling, чтобы безопасно развернуть новые версии Петклинического приложения в каждую виртуальную машину и продолжать обслуживание трафика пользователям на другом сервере.
Эти шаги будут:
- Получить имя виртуальной машины.
- Удалите виртуальную машину из балансировщика нагрузки до Петуклиновое развертывание.
- Добавьте виртуальную машину в балансировщик нагрузки после Петуклиновое развертывание.
- Проверьте петуклановый интерфейс веб-фронта.
В Octopus добавление нескольких шагов к процессу развертывания проката выполняется с помощью Детские шаги Анкет
Gcloud CLI и разрешение Большинство команд, используемых для взаимодействия с Google в этом следующем разделе, используют Google Cloud Cli Анкет Использовать Gcloud CLI вам обычно нужно это разрешить. Для получения дополнительной информации об авторизации GCLOUD, пожалуйста, обратитесь к Документация Анкет
Добавить новый шаг ребенка
Чтобы добавить ребенка, мы открываем меню переполнения (…) для существующего Развертывание Petclinic Web App шаг и выберите Добавить ребенка шаг :
Нам представлено Выберите шаблон шага Селектор, где мы выбираем требуемый тип шага.
Далее я пройду через новые шаги ребенка, необходимые для завершения процесса развертывания. Некоторые примеры сценария были уменьшены до минимума, необходимого для выделения ключевых деталей.
Получить имя экземпляра
Это Шаг сценария Требуется, чтобы мы могли идентифицировать имя виртуальной машины, размещенной в Google Cloud для использования при удалении и добавлении в балансировщик нагрузки. Мы делаем это, запрашивая Google с GCLOUD экземпляры описывают
Команда:
$machineName = $OctopusParameters["Octopus.Machine.Name"] $instanceName=(& gcloud compute instances describe $machineName --project=$projectName --zone=$zone --format="get(name)" --quiet) -join ", "
Если совпадение найдено с использованием машины, идентифицированной с переменной системы осьминога Осьминог. Машина. Имя
, скрипт устанавливает Выходная переменная с именем, как записано в Google Cloud:
Set-OctopusVariable -name "InstanceName" -value $instanceName
Снимите машину с балансировщика нагрузки
Когда у нас есть название машины, на которую мы развертываем, нам нужно удалить ее из целевого бассейна балансировщика нагрузки. Однако, чтобы предотвратить попытку удалить виртуальную машину из целевого пула, когда она не присутствует, мы можем запустить Gcloud Целевые пилоты описывают
Команда проверить:
$instances=(& gcloud compute target-pools describe $targetPoolName --format="flattened(instances[])" --region=$region --project=$projectName --quiet)
Если экземпляр найден в целевом пуле, мы запускаем Gcloud Целевые пулы удаляют интерфейсы
Команда, поставляющая имя экземпляра с помощью -Установки
Параметр:
$instanceName = $OctopusParameters["Octopus.Action[Retrieve machine instance name].Output.InstanceName"] $response=(& gcloud compute target-pools remove-instances $targetPoolName --instances=$instanceName --instances-zone=$zone --project=$projectName --quiet)
После того, как виртуальная машина была удалена из балансировщика нагрузки, мы можем приступить к развертыванию Петклинического приложения.
Нам не нужно добавлять новый шаг ребенка, чтобы развернуть Петклиновое заявление, поскольку оно уже существует. Вместо этого мы поместим этот шаг в нужном месте после того, как добавим необходимые детские шаги.
Тестирование Петклинического заявления
После того, как Петклинический фронт был развернут, мы можем проверить, отвечает ли он на запросы, добавив сообщество шаблон шага называется Http — тестовый URL в детстве.
Мы используем переменную #{Проект. Дикая красавица. URL}
Чтобы проверить, что он возвращает ответ HTTP 200 OK. Это скажет нам, если приложение работает. Любой другой HTTP -ответ приведет к сбою.
Добавить машину в балансировщик нагрузки
Наконец, когда приложение Petclinic было подтверждено как онлайн, мы можем добавить его обратно в целевой бассейн балансировщика нагрузки. Мы делаем это, запустив Gcloud Целевые пулы Add-Stances
командование и предоставление имени экземпляра (как и раньше) с -Установки
Параметр:
$instanceName = $OctopusParameters["Octopus.Action[Retrieve machine instance name].Output.InstanceName"] $response=(& gcloud compute target-pools add-instances $targetPoolName --instances=$instanceName --instances-zone=$zone --project=$projectName --quiet)
Изменение порядка Ребенок шагает
После того, как все шаги ребенка были добавлены, вы можете изменить их при необходимости. В нашем случае нам нужно переместить оригинал Развертывание Petclinic Web App Шаг в середину, чтобы мы не развернули приложение на виртуальную машину пока Он был удален с балансировщика нагрузки.
Чтобы переупорядочить шаги ребенка:
- Используйте меню переполнения (…) и выберите Переупорядочить детские шаги Анкет
- Перестарайте шаги в желаемом порядке.
- Нажмите Сохранить когда закончите.
Процесс развертывания проката
Некоторые из шагов в процессе развертывания проката не требуются для Развитие Окружающая среда. Это потому, что мы не используем балансировщик нагрузки в этой среде. Чтобы пропустить шаги, которые не нужно работать, мы используем среду Условие запуска Анкет Это пропустит шаги, применимые к сбалансированным условиям при развертывании в Развитие Анкет
Полный процесс развертывания проката показан здесь:
Вы можете увидеть пример развертывания в Производство Используя новый процесс развертывания Rolling:
И это все! Мы успешно преобразовали наш процесс развертывания из последовательного в процесс развертывания.
Образец проекта осьминога Вы можете увидеть полный процесс развертывания Петклинического развертывания после Преобразование в процесс развертывания проката, в нашем образцы экземпляра .
Переключиться на новую инфраструктуру
Чтобы использовать нашу новую инфраструктуру, нам нужно направить наших пользователей на наше приложение через балансировщик нагрузки. Самый простой способ сделать это — настроить ваши записи DNS. В случае с Петклиником мне просто нужно настроить DNS Запись Чтобы указать на балансировщик нагрузки и дождаться изменения DNS для обновления.
Изменение любых записей DNS может привести к периоду времени, когда пользователи все еще подключаются непосредственно к виртуальным машинам. Обычно это не более 24 часов, но это будет зависеть от вашего поставщика DNS, и сколько времени изменения DNS потребуются для распространения.
Уборка
На этом этапе вам больше не нужен ваш старый проект Octopus. Вы можете очистить его, отключив его (и эффективно архивируя), либо удалив, если вам больше не нужно для каких -либо требований к аудиту.
Вывод
Как вы надеемся, из этого поста можно увидеть, с несколькими шагами, вы можете переключиться с последовательного процесса развертывания в осьминоге на один, используя функцию прокатного развертывания. Это позволяет вам выиграть от сокращения времени простоя, безопасного в знании того, что ваше приложение может оставаться в сети, чтобы обслуживать запросы вашим пользователям.
До следующего раза, счастливого развертывания!
Учить больше
Этот пост был первоначально опубликован в octopus.com .
Оригинал: «https://dev.to/octopus/convert-an-existing-application-to-use-rolling-deployments-1438»