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

Непрерывная интеграция/непрерывная поставка (CI/CD) представляет собой современный подход к управлению всем жизненным циклом разработки, обновления и доставки приложений. Маневренный и легкий дизайн NGINX и Nginx Plus делает их чрезвычайно полезными инструментами в поддержке многих из частей CI/CD платформы.

С CI/CD все — от исправления ошибок до “мажорного” функционала — доставляется пользователям на постоянной основе. Различные части приложения могут использовать различные языки программирования, различные схемы базы данных, а также различные графики разработки и релизов.

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

dia-kj-2017-06-1-source-test-monitor_1

Процесс состоит из пяти шагов:

 

  1. Управление версиями (source control). Программное обеспечение разрабатывается и обновляется, а затем перемещается в основную ветвь (master branch). В этом примере, мы ориентируемся на коммитах, которые планируются для продакшена. Для простоты, мы называем ее основной ветвью, но он может иметь другое название, в зависимости от вашей системы управления версиями.
  2. Непрерывная интеграция. Программное обеспечение проходит через блок юнит-тестов — если проходит успешно, то перемещается на сборку пакетов и первоначальное развертывание.
  3. Тестирование. (тестирование происходит при переходе на каждый шаг, поэтому этот шаг можно назвать основным тестированием). Продвинутые приемочные испытания основного программного обеспечения и исполнение пакета. Фаза тестирования может также включать другие тесты, такие как тест принятия пользователем (ЕСХН). Фаза UAT не автоматизирована, так что — принадлежит ли она к настоящему процессу CI/CD, является спорным. Если тесты пройдены, программа переходит к статусу “готово к развертыванию” (ready‑to‑deploy).
  4. Непрерывная поставка . Перемещение сразу на продакшен, или задержка программного обеспечение здесь на несколько обновлений, с формальным процессом принятия решения по перемещению любого обновления на продакшен. В некоторых определениях CD, этот шаг должен быть автоматизирован; другие виды позволяют релизить на продакшен по согласованию бизнеса и требований SLA.
  5. Тестирование производительности или развертывания . Тесты пост-развертывания могут вызвать откат к предыдущему, «известному хорошему» варианту — это обычно “ручной” шаг — а затем новые разработки кода для решения проблем. Проблемы юзабилити и новые спецификации требований могут привести новое программное обеспечение к разработке и развертыванию без необходимости промежуточного отката.

 

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

Если происходит сбой в развернутом программном обеспечении, это ПО автоматически откатывается к предыдущей “удачной” версии, то есть обновляется оттуда.

(продолжение читать здесь)

 

Напомним всем читателям, что изучить все процессы CI/CD они могут на нашем авторском курсе «L3-DevOps«.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *