Введение в CI/CD с Nginx и Nginx Plus (часть 1)

Непрерывная интеграция/непрерывная поставка (CI/CD) представляет собой современный подход к управлению всем жизненным циклом разработки, обновления и доставки приложений. Маневренный и легкий дизайн NGINX и Nginx Plus делает их чрезвычайно полезными инструментами в поддержке многих из частей CI/CD платформы.
С CI/CD все – от исправления ошибок до “мажорного” функционала – доставляется пользователям на постоянной основе. Различные части приложения могут использовать различные языки программирования, различные схемы базы данных, а также различные графики разработки и релизов.
Читати про Ubuntu 22.04 LTS на нашому сайті IT Education Blog.
CI/CD является частью группы взаимосвязанных методов, каждый из которых поддерживает остальные:
- Использование инструментов, таких как Bamboo и Jenkins, для непрерывной интеграции
- Использование Git или аналогичных инструментов для управления гибкостью исходного кода
- Использование контейнеров для разработки, тестирования и продакшена
- Использование систем управления контейнеров, таких как Kubernetes и Mesosphere, для разработки, тестирования и продакшена
- Переход к микросервисам для разработки и развертывания
- NGINX, развернутый в качестве обратного прокси-сервера и веб-сервера
- В основе всего остального лежит использование гибкого подхода к управлению разработкой программного обеспечения и смежных дисциплин
Олицетворением CI/CD является автоматизация – ключевой фактор, который позволяет непрерывно выполнять как интеграцию, так и доставку. После того, как код объединен, цель состоит в том, чтобы исключить необходимость вмешательства человека между предоставлением кода для интеграции и доставки одного и того же кода в продакшен-среде.
Рост технологий CI/CD
В недавнем опросе Nginx, примерно 2/3 организаций сообщили об исследование или реализации контейнеров CI/CD, или сразу обоих. Эти изменения также связаны и с программным обеспечением от Nginx и переходе к облачным технологиям. Более 40% внедрений AWS используют NGINX и NGINX Docker image является приложением №1, загружаемым с Docker Hub.
NGINX обрабатывает проксирование, балансировку нагрузки, управление контейнером, а также поддержку микросервисов. В то же время, NGINX обеспечивает переносимость через контейнеры, виртуальные машины, различные облачные платформы и “голое железо”.
NGINX Plus дает и другие преимущества, относящиеся к CI/CD. И API реконфигурации, и разрешение в режиме реального времени DNS-записей – устраняют необходимость вручную управлять и перезагружать конфигурационный файл вашей службы балансировки нагрузки.
NGINX Plus посылает диагностические тесты для подтверждения правильного выполнения приложений, перенаправляя генерацию трафика от сбойных серверов и тем самым устраняет различные сбои и отключения клиентов на вашем сайте. Одним из примеров сочетания проверок работоспособности и автоматизации является создание системы, которая автоматически возвращается к предыдущей версии приложения, когда проверки корректности работы выявляют такие проблемы, как ошибки в недавно развернутой версии приложения.
Правильная реализация CI/CD требует целостного взгляда на всех этапах в процессе разработки и доставки с целью создания благоприятной платформы.
В рамках материала, мы:
- определим основные компоненты CI/CD платформы – признавая при этом, что каждая организация может создать свой собственный специфический процесс
- опишем, что ожидать от разработки программного обеспечения, тестирования и процесса доставки при использовании CI/CD
- выделим роль приложений NGINX и NGINX Plus в прочной и современной CI/CD платформе
Примечание: Термины «непрерывная доставка» и «непрерывное развертывание» часто путают друг с другом. Непрерывная доставка означает постоянное движение кода программного обеспечения до стадии готовности к развертыванию; мы считаем, что это отражает основную ценность процесса. Вы можете выбрать, следует ли также осуществлять непрерывное развертывание – переводя каждое изменение программного обеспечения в продакшен немедленно, вместо того, чтобы позволять изменениям аккумулироваться между релизами. CI/CD, в общем, осуществляет все эти действия без особых проблем. Действительно непрерывное развертывание может быть легко реализовано – в случае, если это необходимо бизнесу.
Что отличает CI/CD
CI/CD является средством реализации принципов гибкой разработки через процесс тестирования программного обеспечения и доставки, что делает разработку программного обеспечения более “интерактивной”, Также CI/CD позволяет почти постоянно обновлять программное обеспечение, что делает весь процесс высокочувствительным к бизнес-требованиям и потребностям пользователей.
Непрерывная интеграция и непрерывная поставка, как часть набора новых инструментов и новых подходов, увеличивает скорость и гибкость всего процесса разработки приложений:
- Непрерывная интеграция использует автоматизацию, чтобы устранить потребность в больших интервалах времени разработки, а затем отдельном интеграционном тестировании. При внесении изменений в программное обеспечение, мало изменившийся функционал выстраивается и испытывается автоматически. На этапе сборки выполняются тесты для проверки синтаксиса кода. После развертывания в конкретной среде и выполнения определенных тестов убедитесь, что новая версия приложения работает корректно.
- Непрерывная поставка выполняет дальнейшую реализацию CI, что позволяет автоматически развертывать изменения приложений в разных средах после того, как программное обеспечение проходит установленные вами тесты.
С CI и CD вместе, разработка и обеспечение качества может вносить изменения более свободно, без волокиты и без ограничений.
Создание платформы для непрерывной интеграции и непрерывной доставки создает гораздо более эффективный рабочий процесс для вашего процесса релизов. Автоматизация избыточных процессов тестирования и оперативных задач дает команде разработчиков возможность релизить их изменения без необходимости ручного взаимодействия с различными командами, которые отвечают каждая за свою среду. Это освобождает операционные команды, чтобы они могли контролировать, поддерживать и совершенствовать существующую инфраструктуру приложений. Это также дает разработчикам время для работы над новыми проектами и возможность быть более эффективными на своих рабочих местах, в то же время давая QA-командам возможность сосредоточиться на улучшении их автоматизированной среды тестирования. В то же время, они могут глубже изучить приложения, которые они поддерживают.
Развертывание CI/CD платформы также создает дополнительную сеть безопасности для приложения путем мониторинга изменений и тестирования, которые могли бы повлиять на его пользователей. Создание собственных автоматизированных тестов позволяет команде QA автоматически определить проблемы, прежде чем они будут выпущены в продакшен.
Общий процесс CI/CD варьируется в зависимости от различных практикующих сообществ и в различных организациях. Тем не менее, есть три общих ключа CI/CD:
- Упрощение – количество шагов в процессе уменьшается, при этом каждый шаг делается как можно более простым
- Автоматизация – каждая часть процесса автоматизируется везде, где это возможно, устраняя состояния ожидания
- Стандартизация – каждая операция в принципе такая же точно, как и в остальных случаях, независимо от количества изменений в программном обеспечении
Диаграмма показывает некий стандартный процесс, который эволюционировал до CI/CD
Процесс состоит из пяти шагов:
- Управление версиями (source control). Программное обеспечение разрабатывается и обновляется, а затем перемещается в основную ветвь (master branch). В этом примере, мы ориентируемся на коммитах, которые планируются для продакшена. Для простоты, мы называем ее основной ветвью, но он может иметь другое название, в зависимости от вашей системы управления версиями.
- Непрерывная интеграция. Программное обеспечение проходит через блок юнит-тестов – если проходит успешно, то перемещается на сборку пакетов и первоначальное развертывание.
- Тестирование. (тестирование происходит при переходе на каждый шаг, поэтому этот шаг можно назвать основным тестированием). Продвинутые приемочные испытания основного программного обеспечения и исполнение пакета. Фаза тестирования может также включать другие тесты, такие как тест принятия пользователем (ЕСХН). Фаза UAT не автоматизирована, так что – принадлежит ли она к настоящему процессу CI/CD, является спорным. Если тесты пройдены, программа переходит к статусу “готово к развертыванию” (ready‑to‑deploy).
- Непрерывная поставка . Перемещение сразу на продакшен, или задержка программного обеспечение здесь на несколько обновлений, с формальным процессом принятия решения по перемещению любого обновления на продакшен. В некоторых определениях CD, этот шаг должен быть автоматизирован; другие виды позволяют релизить на продакшен по согласованию бизнеса и требований SLA.
- Тестирование производительности или развертывания . Тесты пост-развертывания могут вызвать откат к предыдущему, «известному хорошему» варианту – это обычно “ручной” шаг – а затем новые разработки кода для решения проблем. Проблемы юзабилити и новые спецификации требований могут привести новое программное обеспечение к разработке и развертыванию без необходимости промежуточного отката.
Есть приемочные испытания для перемещения программного обеспечения с каждой стадии до следующей – что означает, что есть четыре набора приемочных испытаний. Неудача на любом этапе означает, что программное обеспечение не продвинулось вперед, но вернулось в разработку для ремонта и возможного дальнейшего обновления.
Если происходит сбой в развернутом программном обеспечении, это ПО автоматически откатывается к предыдущей “удачной” версии, то есть обновляется оттуда.
(продолжение читать здесь)
Напомним всем читателям, что изучить все процессы CI/CD они могут на нашем авторском курсе “L3-DevOps“.