[Перевод] Этапы внедрения CI/CD

yxm_nr2zxvaqvyzhkjyxboc5kyi.jpeg
Jason Dorfman, MIT CSAIL

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

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

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

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

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


Мы определенно видим рост использования CI/CD. Я лично все время получаю вопросы насчет непрерывной разработки, тестирования и выпуска ПО. Последний опрос Gartner «Agile in the Enterprise» показал, что все больше команд переходят на гибкую разработку, поскольку гибкие команды имеют значительно более высокий уровень реализации непрерывной интеграции, автоматической приемки тестирования и DevOps. Я думаю, что CI — самая главная точка отсчета для создания автоматических конвейеров, с нее команды обычно начинают работать. Более значимыми аспектами CD являются потребности в автоматическом тестировании и перепроектировании приложений, так что мелкие фрагменты функционала могут быть протестированы и выпущены по отдельности.
Sean Kenefick, вице-президент и аналитик в исследовательской компании Gartner

Практически все новые программные проекты, в которых участвует консалтинговая компания ServerCentral Turing Group, в той или иной степени используют CI/CD. Основными движущими силами при этом являются следующие вещи: отсутствие серверов в инфраструктуре требует интеграции CI/CD; требования безопасности нуждаются в ограничении доступа разработчиков к производственной инфраструктуре; гибкие методы требуют высокой скорости циклов развертывания и тестирования.
Josh Quint, старший директор по облачным решениям

CI/CD становится основной стратегией для многих компаний, связанных с разработкой.


Такие технические достижения, как непрерывная интеграция, комплексное автоматическое тестирование и непрерывная доставка, ранее освоенные модными стартапами, теперь успешно применяются и обычными предприятиями.
Hasan Yasar, технический директор в Software Engineering Institure при Carnegie Mellon University

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


Привлечение ключевых персон к CI/CD на ранних этапах


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

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


Выбор и внедрение правильной системы CI/CD


Системы CI/CD, доступные на рынке, могут дать ощутимую ценность для компаний, а их применение в компании, занимающейся разработкой и выпуском ПО, свидетельствует о здоровье компании. Если сборка, тестирование и поставка новых функций становится тривиальной задачей — способность компании реагировать на изменения значительно улучшается. Если нужно несколько недель или даже месяцев, чтобы сделать что-то для ваших клиентов — придет кто-то другой, кто сможет сделать это лучше.
Josh Komoroske, старший инженер DevOps в StackRox, поставщике технологий безопасности контейнеров

Однако производителям нужно провести достаточно исследований, чтобы вникнуть в ПО, с которым можно построить процессы CI/CD.


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

Как только компания выбрала какую-либо систему, нужно избежать проблемы неиспользования.


Большинство таких решений предлагают бесплатный ознакомительный период, могут внедряться вместе с другими платформами, например GitHub. Настройте совместную работу и начинайте что-нибудь собирать. Автоматизируйте сборку, тесты, поставку. Когда люди увидят. что такие системы дают ценности их рабочим процессам, они сразу же начнут переносить свои задачи в них.
Josh Komoroske


Совместное использование автоматического тестирования и ручных подтверждений


Непрерывная поставка основана на четырех главных частях:
  • Перепроектирование для разделения
  • Автоматизация тестирования
  • Создание автоматического конвейера для процесса
  • Автоматизация создания и настройки окружений
    Эти четыре компонента общие для всех, но есть много индивидуальных методов их реализации.
    Sean Kenefick

Например, для автоматизации тестирования команда должна сосредоточиться на методиках «тесты прежде всего», на которых основано создание автоматизированных модульных и функциональных тестов, создание наборов автоматизированных регрессивных тестов, а также тестирования производительности и безопасности. Также нужно внедрить автоматизированные тесты для проверки правильной настройки окружений и платформ оркестровки.


Не существует самого важного набора для тестирования, они важны все. Наборы также должны совместно использоваться с другими методиками обеспечения качества, например, инструментами статического анализа, обеспечением анализа кода через PR, использованием конвейеров непрерывной интеграции.
Sean Kenefick

Удостоверьтесь, что есть ручные подтверждения на критических точках процесса поставки. Шаги с ручным подтверждением не будут давать непротестированному и неподтвержденному коду попасть в промышленное использование, либо в последующие тестовые окружения. Кроме того, у вас появляется возможность управления попадания кода в ключевые окружения.
Josh Quint


Отслеживание параметров обеспечения успешности работы CI/CD

CI/CD не работает в режиме «поставил и забыл», который актуален для большинства других технологий и процессов.


Узнайте продолжительность и уровень стабильности циклов сборка/тестирование/поставка. Определите области и возможности для оптимизации. Быстро лучше, чем медленно, но надежность и правильность важнее скорости. Процессы CI/CD и связанные с ними инструменты следует рассматривать как «усилители», позволяющие сократить время на разработку и тестирование, а также время вывода на рынок (TtM).
Josh Komoroske

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


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


Понимание движущих сил бизнеса для внедрения CI/CD, мысли о будущих потребностях

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


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

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


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


Автоматизация везде, где это возможно


Компании должны автоматизировать все, что можно автоматизировать в качестве части CI/CD, а также четко обозначить те вещи, которые не будут автоматизированы. Автоматизация — один из столпов DevOps, наиболее ценная вещь, получаемая от реализации DevOps, делающая возможным CI/CD.
Hasan Yasar

Подход Agile-DevOps, стал возможным благодаря практике инфраструктуры-как-кода (IaC), т.е. управления частями инфраструктуры, сетями, виртуальными машинами, балансировщиками нагрузки с использованием тех же методов управления версиями, которыми пользуются команды DevOps для исходного кода, включая автоматизацию различных окружений.


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

От редакции: О внедрении CI/CD, приемах работы с Gitlab CI и лучших практиках построения пайплайна спикеры Слёрма говорят в практическом видеокурсе «CI/CD на примере Gitlab CI». До 3 декабря 2020 курс доступен по цене предзаказа. Присоединяйтесь!

© Habrahabr.ru