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

Что такое CI/CD?

CI/CD — это метод, используемый для частой доставки приложений клиентам за счет автоматизации на этапах разработки. Ключевыми моментами CI/CD являются непрерывная интеграция (CI), непрерывная доставка (CD) и непрерывное развертывание (также CD). Основная цель этого метода — избежать «интеграционного ада», который относится к ситуации, когда время, необходимое для интеграции кода, превышает время, необходимое для фактического написания кода.

CI/CD дает возможность непрерывной автоматизации и непрерывного мониторинга на протяжении всего жизненного цикла приложения. От тестирования и интеграции до поставки и развертывания CI/CD делает все этапы жизненного цикла приложения намного более управляемыми. Эти методы могут быть переплетены, и их часто называют конвейером CI/CD. Как правило, их поддерживают группы разработки и эксплуатации, которые гибко работают вместе с подходом DevOps или надежностью сайта (SRE).

Каковы различные значения CI/CD?

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

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

CD = непрерывная доставка и/или развертывание

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

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

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

Трубопровод

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

Создать > Тестировать > Объединить

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

Автоматически выпускать в репозиторий

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

Автоматическое развертывание в рабочей среде

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

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

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

При разработке современных приложений компании обычно хотят, чтобы несколько разработчиков одновременно работали над разными функциями одного и того же приложения. Однако, если организация объединяет весь исходный код ветвления вместе в один и тот же день (день слияния), работа, связанная с этим, может быть утомительной, ручной и ограниченной по времени. Причина этого в том, что когда разработчик работает изолированно, его код может работать, но в сочетании с кодом другого разработчика, который также работал изолированно, он может не работать! Размер этой проблемы может резко увеличиться, если у каждого разработчика есть собственная, настроенная IDE, а не облачная IDE, используемая всеми разработчиками в команде.

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

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

После автоматизации, реализованной на этапе CI в конвейере, Continuous Delivery автоматизирует выпуск проверенного кода в репозиторий. Чтобы иметь эффективный процесс непрерывной доставки, важно, чтобы CI уже была встроена в ваш конвейер разработки. Цель непрерывной доставки — иметь кодовую базу, всегда готовую к развертыванию в производственной среде.

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

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

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

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

Заключение

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