В данном материале представлена технология, которая охватывает все аспекты создания, усовершенствования и доставки кода. Непрерывная интеграция и развертывание, а также непрерывная доставка формируют основу для новой культуры и набор принципов, позволяющих команде разработчиков быстрее внедрять изменения в производственную среду.
Скорость и качество создания продукта – ключевые элементы успеха в разработке программного обеспечения, что делает их основными факторами конкуренции. В связи с этим устаревшие модели разработки, такие как императивные, структурные и модульные, заменены более новой моделью CI/CD.
CI/CD – это процесс непрерывной интеграции и непрерывной доставки продукта.
Концепция CI/CD относится к гибким методологиям разработки ПО и ориентирована на внимание к бизнес-требованиям и безопасности, а также на обеспечение высокого качества конечного продукта. Этот подход включает в себя:
- автоматизацию процессов сборки, упаковки и тестирования программного обеспечения;
- автоматическое развертывание приложения в разных окружениях (например, на тестовых, промежуточных и продуктовых серверах);
- минимизацию ошибок и уязвимостей в программном продукте путем постоянной проверки и корректировки кода.
Приведем пример: для того чтобы выполнить расчеты в EXCEL, удобнее воспользоваться формулой и получить результат за секунду, чем высчитывать каждую строку вручную на калькуляторе.
Основными принципами CI/CD являются:
- Разделение ответственности за различные этапы процесса, минимизация рисков на каждом этапе жизненного цикла продукта.
- Сокращение времени обратной связи за счет автоматизации.
- Создание единого рабочего пространства для разработчиков, сопоставимого с производственной, тестовой и средой для разработки.
Преимущества CI/CD
- Повышение скорости разработки: разработчики могут быстрее тестировать и вводить изменения в продукт.
- Качество тестирования: возможность выявлять ошибки на ранней стадии разработки.
- Выбор оптимального варианта: разработчики могут протестировать различные варианты кода быстро и внедрить наиболее подходящий.
Под непрерывной интеграцией, мы понимаем развертывание кода в тестовых системах, а под непрерывной доставкой – доставку приложения до продукта (максимально упрощая: написал – отправил в репозиторий, всё само собралось, автоматически протестировалось, установилось).
Из чего состоит CI/CD?
- Git (инструмент для автоматизации рутинных задач, возникающих в процессе разработки программного обеспечения).
- Автоматизированные инструменты развертывания
- GitLab (инструмент для автоматизации процессов тестирования, развертывания и мониторинга проектов).
Для того чтобы работала CI/CD, нужно настроить гид, развернуть тестовое окружение с необходимым перечнем: фронт, тест, в зависимости от того, какие уровни у заказчика, и конечный сервер, на котором всё должно появиться после одобрения.
Основная проблема в том, чтобы понимать все взаимосвязи этого процесса: как происходит взаимодействие и по каким алгоритмам, весь список сторонних компонентов, которые будут использованы в работе. Должны быть проработаны алгоритмы действий на случай если что-то пошло не так.
Как проходит процесс CI/CD
- Необходимо забрать из репозитория код и переместить на тестовый сервер.
- Выполнить сборку приложения
- Запустить автоматизированное тестирование, если приложение собралось без ошибок.
Если все три процесса прошли успешно, тогда первые два разворачиваем для продуктовой среды.
Процесс CI/CD
Однако не всё так просто, дьявол кроется в деталях.
Все перезапуски, обновления приложений требуют времени, поэтому сервер перестает быть доступным, когда мы обновляем наше приложение. Рассмотрим несколько проблем, с которыми можно столкнуться в процессе работы.
Проблема № 1
При развертывании произошел сбой сервера – сервис недоступен или работает с ошибкой. В таком случае необходимо ввести дополнительную стадию тестирования после развертывания в продуктовое окружение. В классическом случае – откат из резервной копии, здесь мы получаем неправильно выстроенный процесс CI/CD.
Решение: обращаемся к дополнительным технологиям, например контейнеризации. В этом случае разворачиваем приложение на новой среде – не на физическом сервере, а на еще одной копии, чаще всего для этого используются контейнеры. После того как...