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

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

Непрерывная интеграция

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

Непрерывная доставка

Убедитесь, что это версия, всегда готовая к развертыванию в производственной среде.

Непрерывное развертывание

Последним шагом для согласованного конвейера CI / CD является развертывание приложения. Это на один шаг дальше, чем непрерывная доставка. Каждый раз, когда новая версия объединяется с master, запускается новый процесс развертывания.

REST API с CI / CD в Azure DevOps

Существует множество инструментов для реализации этого типа гибкого конвейера CI / CD. В этом примере я буду использовать Azure DevOps.

Настройте конвейер сборки

Я решил создать свой конвейер на YAML. Посмотрим на файл:

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

Создайте запрос на вытягивание и проверьте изменения с помощью конвейера сборки

Этот пул-реквест пытается объединиться с мастером, поэтому запускает конвейер сборки.

Результат сборки следующий:

Успех! Теперь я могу объединить свой пулреквест с мастером, потому что условие, которое я определил, выполнено. На данный момент у нас уже есть непрерывная интеграция и непрерывная доставка. Однако мы также хотим применить эти изменения в производственной среде.

Настройте свои службы приложений в Azure

Для простоты я буду использовать Службу приложений Azure для развертывания моего REST API. У этой услуги есть бесплатный уровень.

Я создал План службы приложений для каждого приложения API. Я выбрал размер F1, который предоставляется бесплатно, но при желании могу определить лучшую конфигурацию для производственной среды. По этой причине у нас должен быть один план обслуживания для каждой среды, потому что их потребности различны.

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

Настройте конвейер выпуска

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

После этого вам нужно настроить свой первый этап конвейера выпуска. Я назвал его Разработка. Выберите подписку Azure, тип приложения, а затем службу приложений, созданную для целей среды разработки.

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

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

Теперь мы можем создать новый этап для производственной среды. На этом этапе я настроил условие перед развертыванием, поэтому переход не должен происходить автоматически. У условия есть один утверждающий.

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

Ваш конвейер выпуска должен быть похож на следующее изображение:

Поздравляем, у вас есть непрерывное развертывание, все настроено!

Вывод

CI / CD - это лучшая практика DevOps, поскольку сокращает расстояние между разработчиками, которые хотят часто вносить изменения, с операциями, которым требуются стабильные приложения. Вначале этот метод требует сотрудничества между группами разработки и эксплуатации, чтобы решить, какие технологии, практики, приоритеты и политики следует применять. Как только это будет определено, обе команды узнают, как работать с конвейером CI / CD.
Помните, что это не будущее, это настоящее! Итак, если вы еще не начали его использовать, подумайте о том, чтобы начать.