Внедрение рабочего процесса CI/CD для разработки приложений становится все более популярным. Однако в то же время масштабирование и оптимизация CI/CD представляют собой проблему.
Сегодня мы собираемся обсудить, в чем заключается эта проблема, и выяснить, как именно мы можем масштабировать и оптимизировать CI/CD. Итак, следуйте за нами!
В настоящее время разработкой приложений обычно занимаются команды, состоящие из нескольких разработчиков. Каждый человек или команда играет свою роль в проекте, выполняя свою часть работы.
Затем мы оказываемся в конце проекта с несколькими фрагментами кода, которые нужно скомпилировать. В зависимости от методов работы каждого на управление этой интеграцией может быть потрачено много времени.
CI/CD, непрерывная интеграция и непрерывная доставка/развертывание являются решением этой проблемы и гарантируют выпуск обновлений без ненужных задержек и конфликтов. Давайте разберемся в этом процессе.
Непрерывная интеграция
CI или непрерывная интеграция группирует процессы, направленные на непрерывную публикацию изменений и дополнений кода в общей ветке проекта. Это позволяет тестировать код, а также вносить улучшения и изменения в режиме реального времени. Цель — протестировать каждый элемент посредством создания тестов.
Эта постоянная мера позволяет не проверять в конце все в одном блоке и не работать над слишком большим количеством элементов одновременно. Поэтому выполнение модульных тестов очень полезно для обеспечения этого. Таким образом, легче обнаружить ошибки, гарантируя, что код хорошо компилируется и не создает регрессий.
Непрерывная доставка
Непрерывная доставка или CD объединяет непрерывную интеграцию и тестирование, которые можно объединить в контейнеры и запустить в производство. То есть он собирает эти коды и выполненные тесты и запускает их в производство посредством автоматизации.
Даже если это требует действий человека, оно становится автоматизированным, поскольку все, что было сделано, выводится «в эфир» интегрированным и полным образом. Конкретно, благодаря непрерывному распространению, наше приложение разработано таким образом, чтобы его можно было запустить в производство в любое время.
Непрерывное развертывание
Хотя концепции непрерывной доставки и непрерывного развертывания схожи, между ними есть различия. Если их цель одна и та же, то есть развертывание приложения в рабочей среде, то средства ее достижения различаются. Что отличает непрерывную доставку от непрерывного развертывания, так это выпуск.
Действительно, непрерывное развертывание позволяет напрямую развертывать каждую модификацию, которая проходит на разных этапах нашего конвейера. При непрерывной доставке для развертывания необходим этап проверки человеком.
Масштабирование CI/CD
Когда количество микросервисов увеличивается, масштабирование CI/CD становится практически неизбежным. Увеличение количества микросервисов приводит к тому, что к одному git-репозиторию подключаются разные конвейеры, что увеличивает нагрузку на CI-сервер и снижает производительность.
Для масштабирования CI/CD необходимо создать стандартизированный и автоматизированный конвейер разработки для всех команд и на его основе обеспечить качество поставок отдельных разработчиков и команд. Это также упрощает управление трубопроводом.
Масштабирование может быть достигнуто путем определения процесса CI для выполнения модульных тестов и проверки качества поставляемого кода.
Далее следует процесс компакт-диска для создания образов и их непрерывного развертывания в средах и, наконец, определение процесса создания образов и их развертывания в производственной среде.
Шаги по масштабированию CI/CD
Первым шагом является согласование процесса разработки с архитекторами с привлечением руководителей групп. Далее следует сопоставление ветвей Git со средами (разработка -> разработка и мастер -> [омологация и производство]). Затем происходит запуск задания CI при каждом запросе на извлечение и задания CD при каждом изменении в сопоставленных ветвях.
Поток заданий может быть создан для отслеживания как CI, так и CD.
Процесс работы CI состоит из 7 этапов:
- Проверьте ветку источника и назначения запроса на включение;
- Проверяет, нет ли в слиянии конфликтов, требующих разрешения вручную;
- Запускайте модульные тесты;
- Соберите пакет, чтобы проверить его целостность и возможность компиляции кода;
- Проверка качества кода триггера;
- Увеличить и зафиксировать версию проекта в исходной ветке;
- Уведомляйте репозиторий Git запроса на включение об успехе или сбое через вызов Webhook или Rest API (репозиторий Git).
Поток заданий компакт-диска следует по следующему пути:
- Уведомленная ветвь извлекается.
- Артефакт создается с использованием специального инструмента сборки проекта, над которым ведется работа.
- После поступления артефакта проекты библиотеки отправляются в Nexus для хранения артефакта, и поток завершается.
Проводятся следующие действия:
Шаг 1. Для сгенерированного артефакта создается образ Docker, версия артефакта применяется к образу Docker.
Шаг 2. Образ загружается в реестр Docker.
Шаг 3. Развертывание посредством развертывания образа через Kubernetes.
Для проектов приложений, находящихся в среде утверждения/производства, выполните шаги 1 и 2 выше, а затем следующие:
- Развертывание посредством развертывания образа через Kubernetes в среде утверждения;
- В работе делается перерыв, чтобы дождаться утверждения внедрения в производство;
- В случае одобрения утверждаемое изображение передается в производство;
- В противном случае он откатывает изображение в знак одобрения.
CI/CD-оптимизация
CI/CD улучшает цикл разработки приложений и решает проблемы, вызванные интеграцией нового кода и увеличением частоты доставки.
Ниже описано, как можно дополнительно оптимизировать использование CI/CD:
Уделяйте первоочередное внимание исправлению поврежденной сборки
Когда сборка выходит из строя, ее исправление должно быть приоритетом команды. Если сборку невозможно исправить за считанные минуты, команда должна решить, удалить ли код или отключить флаг функции.
Идея исправления сломанной сборки заключается в том, что сборка всегда будет создавать рабочий код, который можно выпустить.
Небольшие частые развертывания
Как правило, стабильность приложения находится под угрозой при каждом развертывании. Поэтому мы склонны дистанцировать развертывания друг от друга. Проблема этого подхода в том, что мы накапливаем слишком много изменений. Одно из этих изменений могло пойти не так, и нам пришлось бы откатить остальные, которые работали.
Примените шаблон «душитель» и разбейте сложные изменения на маленькие и простые. Если вы развертываете чаще и работаете небольшими партиями, риск развертывания снижается.
Автоматизируйте тесты контроля качества для снижения рисков
Мы все, вероятно, были вовлечены в сценарий «работал на своей локальной машине», потому что локальные среды разработки часто различаются. Между вашей локальной средой и местом, где вы приступите к производству, может быть много разных вещей. Вы можете оптимизировать CI/CD, автоматизируя задачи обеспечения качества (QA), такие как тестирование браузера, снижая риск попадания ошибки в работающее приложение.
Доверяйте автоматическим тестам
Чтобы проверить, когда разработчик интегрирует новый код, CI полагается на автоматизированный и надежный набор тестов. Если вам нужно скомпилировать код, первая проверка — его компиляция. Затем вы можете добавить столько тестов, сколько считаете критически важным.
Сколько тестов должно быть включено? Чтобы определить это, помните, что цель CI — обеспечить обратную связь как можно быстрее. Если разработчику придется ждать час, чтобы получить отзыв, это не сработает. Вы всегда что-то упустите, но когда вы обнаружите ошибку в производстве, создайте тестовый пример и включите его в цикл CI.
Всегда учитывайте безопасность
Подумайте о безопасности инструмента CI/CD, поскольку он интегрируется в существующие конфигурации или среды. CI/CD требует, чтобы все инструменты тестирования безопасности вызывались программно, а их результаты агрегировались в одном месте. Ищите инструменты с API-интерфейсами для автоматического аудита шифрования.
Преимущества масштабирования и оптимизации CI/CD
Помимо повышения эффективности команд разработчиков, масштабирование и оптимизация CI/CD имеют и другие преимущества, некоторые из которых:
Сокращение накладных расходов
Часы разработки обычно оплачиваются, но как насчет времени, потраченного на развертывание кода или файлов вручную? Автоматизация значительной части вашего потока сэкономит время на оплачиваемую работу, и это оценит каждый. Автоматизированное тестирование также позволяет вам быстрее потерпеть неудачу, вместо того, чтобы находить ошибки в тестировании или производстве, или, что еще хуже, их находит клиент. Больше ошибок, исправленных за то же время, — это явная победа.
Доставка с меньшим количеством ошибок и меньшим риском
Вы обнаруживаете ошибки гораздо раньше в процессе разработки, чаще выпуская мелкие изменения. Когда вы внедряете автоматизированные тесты на всех этапах разработки, вы не рискуете перенести неудачный код на следующий этап, и при необходимости легче откатить незначительные изменения.
Реагируйте на рыночные условия быстрее
Рыночные условия постоянно меняются. Предположим, вы обнаружили, что новый продукт теряет доход или что больше клиентов заходят на ваш сайт со смартфонов, чем с ноутбуков. В этом случае гораздо проще внести быстрые изменения, если вы оптимизировали непрерывную доставку.
Уверенность
Если вы оптимизировали CI/CD, а это значит, что у вас есть надежный набор тестов, ваша уверенность в том, что вы не сообщите об ошибке, значительно возрастает. Если вы прозрачны в своем процессе и обучаете остальную часть своей команды и клиентов, их доверие к вам как к команде разработчиков также возрастает.
Заключительные слова
CI/CD ускоряет интеграцию и доставку. Однако важно масштабировать и оптимизировать его, чтобы процесс не стал контрпродуктивным из-за возрастающей сложности.
Вы также можете взглянуть на некоторые из лучших инструментов CI.