Оцените преимущества внедрения DevOps‑практик с помощью инфраструктуры Yandex Cloud! Получите грант на 4 000 рублей, которые можно потратить на оплату облачных решений платформы, или воспользуйтесь другими программами поддержки бизнеса. Благодаря тестированию вы поймёте, как сервисы помогут оптимизировать бизнес‑процессы вашей компании.
![](https://storage.yandexcloud.net/cloud-www-assets/blog-assets/ru/posts/2022/10/CI-CD_cover_post.png)
Что такое CI/CD и как эта практика связана с DevOps и облаками
Рассматриваем преимущества CI/CD, её место в разработке и возможности внедрения облачных инструментов.
Высокая скорость разработки продукта без ущерба качеству позволяет компании сохранять конкурентоспособность на рынке. Много лет в сфере разработки программного обеспечения царствовали императивная, структурная и модульная модели программирования. Они вполне рабочие, но не слишком эффективные, появление новой модели было ожидаемым. Ею стала концепция CI/CD, что расшифровывается так: CI — Continuous Integration, CD — Continuous Delivery, «непрерывная интеграция и непрерывная поставка».
Фактически под этим подразумевают цепочку действий, которая позволяет разработчикам увеличить скорость внедрения изменений, сохраняя или даже повышая качество кода, а с ним сервиса или приложения. Подход предполагает, что процесс разработки можно условно разбить на семь этапов.
![](https://storage.yandexcloud.net/cloud-www-assets/blog-assets/ru/posts/2022/03/scale%20DevOps_1.png.webp)
- Код. Команда разработки пишет новый код, исправляет ошибки или внедряет дополнительные функции, выполняет тесты, а затем отправляет в ветку master с актуальной сборкой программного продукта. Одна или несколько команд могут отправить любое количество модулей с кодом в ветку master.
- Сборка. Когда срабатывает триггер, начинается автоматическая сборка и тестирование кода. Условия для запуска системы управления версиями и начала сборки настраиваются заранее.
- Тестирование. Когда программа заканчивает тестировать работоспособность выкатываемой версии проекта, можно приступать к ручной проверке.
- Релиз. Когда ручное тестирование завершено успешно, разработчики вносят нужные исправления и выпускают новую версию своего продукта.
- Развёртывание. Финальная версия кода отправляется на боевой сервер. Пользователь начинает взаимодействовать с сервисом или приложением, изучать новые функции.
- Поддержка и мониторинг. Программный продукт становится доступным обычным пользователям. В этот момент отдел разработки мониторит происходящее, отслеживая и анализируя пользовательский опыт.
- Планирование. Используя данные мониторинга, разработчики формулируют идеи новых функций и план дальнейших улучшений продукта. Далее команда разработки приступает к написанию кода.
В чём отличие от DevOps
DevOps — это более широкое понятие, чем методика CI/CD, поскольку распространяется на весь цикл разработки ПО. Сюда входит сотрудничество разработчиков, мониторинг, контроль версий и т. д. Если же говорить о CI/CD, то это одна из Agile‑практик, основной элемент DevOps.
Можно сказать иначе: DevOps — это философия и культура, которая позволяет улучшить качество разработки, а Continuous Integration/Continuous Delivery — цепочка из упомянутых выше семи этапов, благодаря которым становится возможным данный подход.
Нужно отметить: компании могут практиковать разные подходы к внедрению идей DevOps, но без непрерывной интеграции и непрерывной доставки невозможно воплотить в жизнь эту концепцию. CI/CD с частыми выпусками обновлений — базовая часть культуры DevOps. Для крупных монолитных систем данная методология не подходит, тогда как для микросервисной архитектуры она обеспечивает наивысшую скорость доставки изменений в продакшн.
![](https://storage.yandexcloud.net/cloud-www-assets/blog-assets/ru/posts/2022/03/microservices-3.png.webp)
Цикл разработки включает четыре стадии: коммит, сборка, тестирование и развёртывание. Популярный в последнее время Serverless‑подход в связке с облачными сервисами позволяют разработчикам уделять меньше времени инфраструктурным вопросам, занимаясь непосредственно продуктом.
Если вам интересно, как можно эффективно использовать бессерверные вычисления, рекомендуем посмотреть доклад Хамзета Шогенова «CI/CD для Serverless‑приложений»:
Цели и принципы CI/CD
Внедрение методологии позволяет достичь сразу нескольких целей. В первую очередь — создание условий для автоматизированной сборки, упаковки и проверки готового продукта на предмет ошибок. Во вторую — сокращение количества ошибок в создании программного обеспечения, повышение скорости развёртывания сервиса или приложения в разных средах.
Принципы напрямую влияют на качество разработки. Что это за принципы:
- Ответственность. В команде разработчиков все несут ответственность за свою часть работы. Это влияет на формирование бизнес‑логистики, внедрение сквозных функций и приёмочных испытаний.
- Уменьшение рисков. Команды разработчиков работают над снижением рисков путём контроля бизнес‑логистики, изучения User Experience, повышения качества обработки данных.
- Быстрое получение обратной связи. Задача разработчика и клиента — добиться максимального согласования правок и последующих изменений в коде. Сборка и проверка могут быть автоматизированы. Для этапов, где участвует человек, можно уменьшить число промежуточных звеньев.
- Реализация среды. Для разработчика важно иметь доступ в рабочую среду с главной и вспомогательными ветками. Так обеспечивается более эффективный контроль качества кода, достигается нужный уровень отказоустойчивости и т. д.
В этой статье мы расскажем:
Преимущества CI/CD
Популярность методики обусловлена тем, что она даёт команде большое количество преимуществ. Например, разработчики могут быстрее тестировать новые идеи, внедряя их в продукт раньше конкурентов.
Какие ещё преимущества можно назвать?
Увеличение скорости итераций
CI/CD в рамках DevOps‑подхода увеличивает скорость разработки за счёт автоматизации развёртывания изменений кодовой базы. При использовании других подходов эти процедуры выполняются вручную. Время доработок уменьшается до нескольких дней (в крупных проектах — недель).
Повышение стабильности кода
Создание своеобразного конвейера, который позволяет последовательно добавлять изменения в код, уменьшает риск возникновения ошибок, влияющих на работу сервиса или приложения.
Упрощение исправлений
Поскольку CI/CD предполагает объединение небольших изменений, команде проще обнаружить и исправить возможные баги на ранней стадии, пока они не успели стать большой проблемой. Сочетание ручного, а также автоматического тестирования снижает вероятность накопления ошибок в релизе и уменьшает время работы над проектом.
Быстрое получение фидбэка
Небольшие итерации проще тестировать, развёртывать и внедрять. Это позволяет ускорить получение обратной связи от пользователей.
Повышение качества командной работы
Использование практик CI/CD позволяет сформировать процессы, определить сроки сдачи кода и выпуска сборки. В работе появляется ясность, цели становятся понятнее, а команда видит, как ей надо действовать.
Рост удовлетворённости клиентов
Внедрение CI/CD приводит к тому, что сборка всегда готова к использованию. Соответственно, перебоев в работе сервиса становится меньше, что хорошо для клиентов. А их пожелания, которые способны сделать продукт лучше, можно быстро внедрить.
Появление вариативности
Гибкость итераций и возможность быстрого тестирования вариантов позволяет команде ещё на ранних этапах отказываться от неэффективных вариантов кода. За счёт своевременной отбраковки тупиковых вариантов развития экономятся ресурсы, затрачиваемые на проект.
Особенно нужно отметить тот факт, что методика действительно помогает быстрее внести исправления и отладить систему при обнаружении уязвимостей в коде. Подробнее об этом мы рассказали в видео «Обнаружение Log4Shell в CI/CD с помощью GitLab»:
Инструменты для CI/CD
Внедряем GitOps практики при помощи Kubernetes®
Команды используют разные инструменты для автоматизации процесса тестирования и доставки кода до конечных пользователей. Что применяют чаще всего?
-
GitLab CI. Используется для управления репозиториями проекта, ведения истории выполнения тестов и доработок, контроля ошибок. С помощью Managed Service for GitLab можно управлять DevOps‑платформой GitLab в инфраструктуре Yandex Cloud.
-
Jenkins. Проверенный временем инструмент, благодаря которому разработчики могут быстрее строить, автоматизировать и тестировать код. Поддерживает работу с более чем 1400 плагинами, позволяя настроить процесс под требования разных команд.
-
Buddy. Умный инструмент с удобным интерфейсом. Надёжный, простой, а потому популярный. Подходит для полноценной разработки с использованием кода с GitHub, Bitbucket и GitLab.
-
Bamboo CI. Инструмент может одновременно собирать, тестировать и развёртывать несколько проектов, при ошибках предоставляет анализ произошедшего, совместим с PHPUnit, JUnit, Selenium и поддерживает импорт из Jenkins.
-
Docker. Благодаря контейнеризации решаются многие задачи микросервисной архитектуры. Можно упаковать проект со всем окружением и зависимостями в контейнер, создавать кластеры актуальных версий, распределять нагрузку и вести статистику. Управлять проектом будет проще, если использовать Managed Service for Kubernetes®. А если нужно управлять только образами и контейнерами Docker, используйте Container Registry.
-
Circle CI. Хорошо известная платформа для автоматизации сборки и тестирования, организации комплексного процесса развёртывания. Предусмотрена возможность интеграции с Bitbucket, GitHub и GitHub Enterprise, а также облачными сервисами. Решение поддерживает матрицу систем контроля версий, контейнерных систем и механизмов поставки.
-
CodeShip. Инструмент умеет разворачивать код напрямую из GitHub и Bitbucket. Предлагает удобную среду, которая совместима с разными технологиями, языками и развёртываниями в разных окружениях.
-
Travis‑CI. Облачный сервис непрерывной интеграции, который умеет бесшовно интегрироваться с GitHub с минимумом настроек.
CI/CD в Yandex Cloud
Инструменты и управляемые облачные сервисы можно использовать в качестве отдельных элементов, необходимых для создания CI/CD‑процессов в вашей компании. Вы можете построить CI/CD‑процесс на базе системы хранения кода GitLab в облаке с помощью Serverless‑подхода и таких сервисов, как Cloud Functions, Object Storage, Container Registry.
В Yandex Cloud легко организовать полный цикл создания приложений, начиная от его разработки, заканчивая их запуском. В качестве узлов кластера Kubernetes® можно подключить локальные и облачные серверы, расположенные вне Yandex Cloud, или запустить код в виде функции с помощью сервиса Cloud Functions. Автоматизация доставки приложений осуществляется с помощью Helm, Draft или Brigade.
Управляемый сервис Kubernetes® упрощает процессы развёртывания, масштабирования и обслуживания контейнерной инфраструктуры, предоставляя окружение для управления контейнерами приложений. Обновление версий, заботу о безопасности и работоспособности берёт на себя Yandex Cloud.