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

Что такое конвейер CI/CD?
A Конвейер CI / CD Автоматизирует весь путь, который проходит изменение кода от коммита разработчика до развернутого релиза. Он компилирует код, запускает набор тестов и безопасно продвигает бинарный файл в одну или несколько сред. Хорошо спроектированный конвейер уменьшает количество ошибок, возникающих при ручном вмешательстве, обеспечивает быструю обратную связь с разработчиками и позволяет проводить небольшие, частые итерации продукта.
Конвейер объединяет автоматизацию и непрерывный мониторинг на протяжении всего жизненного цикла программного обеспечения — от интеграции и тестирования до доставки и развертывания. В совокупности эти взаимосвязанные процессы называются конвейером CI/CD.
Что такое непрерывная интеграция, непрерывная доставка и непрерывное развертывание?
- Непрерывная интеграция (CI): Это практика разработки, при которой члены команды интегрируют свою работу как минимум один раз в день. Каждая интеграция проверяется с помощью автоматизированной сборки и запуска тестов, которые быстро выявляют ошибки.
- Непрерывная доставка (CD): Инженерная практика, при которой команда поддерживает продукт в состоянии, готовом к выпуску, в конце каждой итерации. Развертывание в продакшене обычно осуществляется вручную.
- Непрерывное развертывание (CD): Это выводит непрерывную доставку на новый уровень — каждое изменение, прошедшее автоматическую проверку, автоматически развертывается в производственной среде без участия человека.
Этапы конвейера CI/CD
Конвейер CI/CD представляет собой исполняемую спецификацию шагов, необходимых для выпуска новой версии программного обеспечения. Сбой на любом этапе приводит к уведомлению — по электронной почте, Slackили по другому каналу — чтобы ответственный инженер был немедленно оповещен.
Этапы конвейера CI/CD.
Исходный этап
Конвейер запускается при изменении в репозитории кода. Любой коммит уведомляет инструмент CI/CD о необходимости запуска соответствующего конвейера. Другие распространенные триггеры включают инициированные пользователем рабочие процессы, запланированные запуски и результаты работы конвейеров вышестоящих репозиториев.
Стадия сборки
На этапе сборки компилируется исходный код и разрешаются его зависимости, в результате чего получается исполняемый продукт. Компилируемые языки, такие как... C++, JavaЯзыки C и Go должны создавать здесь бинарные файлы. Интерпретируемые языки, такие как JavaСценарий, PythonИ Ruby по-прежнему извлекает выгоду из этого этапа для упаковки зависимостей, проверки синтаксиса и создания образов контейнеров.
Сбой на этапе сборки обычно указывает на фундаментальную ошибку в конфигурации проекта, поэтому проблему необходимо устранить незамедлительно.
Тестовый этап
Этап тестирования выполняет автоматизированный набор тестов для проверки корректности кода и поведения программного обеспечения. Он выявляет легко воспроизводимые ошибки до того, как они попадут к клиентам. Написание и поддержка тестов — это ответственность разработчика, а конвейер лишь обеспечивает их выполнение.
Этап развертывания
На этапе развертывания проверенный артефакт перемещается в целевую среду, такую как тестовая среда, среда пользовательского тестирования или производственная среда. После того, как сборка пройдет все необходимые тесты, развертывание может быть запущено автоматически (непрерывное развертывание) или после ручного контроля (непрерывная доставка).
Пример конвейера CI/CD
Приведённый ниже пошаговый пример демонстрирует конкретный конвейер, использующий GitHub. CircleCIи АВС.
- Источник Code Управление Разместите код приложения в частном репозитории GitHub, чтобы он интегрировался с сервисами сборки, сканирования и развертывания.
- Непрерывная интеграция: соединяться CircleCI в репозиторий, чтобы каждая отправка изменений приводила к загрузке нового кода, его компиляции и выполнению набора тестов.
- Развертывание в среде UAT: конфигурировать CircleCI Развернуть успешно собранные сборки в среде AWS UAT для тестирования заинтересованными сторонами.
- Развертывание в производственной среде: Используйте одни и те же этапы CI/CD для продвижения артефакта в продакшн, с ручным подтверждением, если вы используете непрерывную доставку.
Лучшие практики CI/CD Pipeline
Приведенные ниже методы обеспечивают быструю, надежную и заслуживающую доверия работу конвейеров обработки данных со стороны команды:
- Перед автоматизацией задокументируйте текущий процесс доставки, чтобы знать, что следует сохранить, изменить или удалить.
- Начните с небольшого экспериментального проекта, а не автоматизируйте весь конвейер сразу.
- Структурируйте конвейер как многоэтапный процесс, чтобы при быстром выполнении сначала проводились фундаментальные проверки.
- Для обеспечения воспроизводимости сборок запускайте каждый рабочий процесс из чистой, изолированной среды.
- Добавьте инструменты с открытым исходным кодом, охватывающие все аспекты, от стиля кода до сканирования безопасности.
- Используйте центр контроля качества кода, который запускает одни и те же тесты для каждой ветки.
- Проверяйте каждый запрос на слияние (pull request) с помощью экспертной оценки и учитывайте результаты работы конвейера при проверке.
- Определите показатели успеха до начала перехода — они способствуют постоянному совершенствованию.
Преимущества конвейеров CI/CD
Развитая система CI/CD обеспечивает ряд измеримых преимуществ:
- Заменяет подверженные ошибкам ручные сборки и релизы надежной автоматизацией.
- Улучшает согласованность и качество каждого отгружаемого артефакта.
- Повышает гибкость — новые функции могут поставляться по запросу.
- Оптимизирует взаимодействие между разработчиками, специалистами по контролю качества и операторами.
- Ускоряет циклы обратной связи с клиентами благодаря частым выпускам обновлений.
- Повышает прозрачность информации о продукте за счет информационных панелей, журналов и уведомлений.
- Устраняет ошибки, возникающие при ручной обработке данных, и снижает затраты на выпуск.
- Сокращает жизненный цикл разработки программного обеспечения.
- Обеспечивает быструю обратную связь от разработчика к конечному пользователю.
- Выделяет изменения, которые нарушают сборку, чтобы их можно было быстро отменить.
- Сочетает автоматизированные тесты с несложным ручным исследовательским тестированием для поддержания высокого качества.
Важные инструменты CI/CD
Современные команды могут выбирать из развитой экосистемы инструментов CI/CD. Наиболее распространенные из них описаны ниже.
1) Jenkins
Jenkins Это сервер непрерывной интеграции с открытым исходным кодом, который автоматизирует рабочие процессы сборки, тестирования и выпуска. Написан на языке программирования... Java и поддерживается обширной экосистемой плагинов. Jenkins Обеспечивает электропитанием сотни тысяч установок по всему миру.
Требования:
- Собирает и тестирует код много раз в день.
- Автоматизирует весь процесс сборки и тестирования, экономя время и сокращая количество дефектов.
- Развертывает код после каждой успешной сборки и тестирования.
- Ускоряет цикл разработки благодаря быстрой обратной связи.
Ссылка: https://www.jenkins.io/download/
2) Bamboo
Bamboo Это сервер непрерывной интеграции, объединяющий автоматическую сборку, тестирование и выпуск в одном инструменте. Он легко интегрируется с Jira Software и Bitbucket.
Требования:
- Выполняет параллельные пакетные тесты.
- Быстрая установка и настройка.
- Настройки разрешений для каждой среды позволяют разработчикам и специалистам по контролю качества развертывать приложения в своих собственных средах.
- Встроенные рабочие процессы ветвления Git, которые автоматически объединяют ветви.
Ссылка: https://www.atlassian.com/software/bamboo
3) CircleCI
CircleCI Это гибкий инструмент непрерывной интеграции, который запускает сборки для кроссплатформенных мобильных приложений. Python API, кластеры Docker и многое другое. Это уменьшает количество ошибок и повышает качество приложений благодаря быстрой обратной связи.
Требования:
- Выбор среды сборки.
- Поддерживает множество языков, включая C++, JavaСкрипт, .NET, PHP, Pythonи Руби.
- Поддержка Docker для пользовательских образов сборки.
- Автоматически отменяет сборки, находящиеся в очереди или запущенные, при запуске новой сборки.
Ссылка: https://circleci.com/
4) GitHub Actions, GitLab CI и Argo CD
GitHub Actions и GitLab CI интегрируют CI/CD непосредственно в платформу контроля версий, устраняя необходимость во внешнем сервере сборки. Argo CD добавляет непрерывное развертывание в стиле GitOps для кластеров Kubernetes, приводя кластер в соответствие с желаемым состоянием, объявленным в Git.
Почему конвейер CI/CD важен для ИТ-лидеров?
- Повышает надежность и предсказуемость выпуска релизов.
- Это делает инженерную организацию более эффективной.tracвыгодно для разработчиков.
- Извлекает код из системы контроля версий и запускает сборку одним щелчком мыши.
- Обеспечивает безопасное перемещение бинарных файлов в целевые среды.
- Позволяет руководителям проектов управлять переменными среды и конфигурацией для каждой среды.
- Публикует компоненты приложения в веб-сервисы, базы данных, API и другие сервисы.
- Система отображает данные журналов и оповещения о состоянии каждого релиза.
- Проверяет изменения в коде до их дальнейшего внедрения, снижая количество дефектов в рабочей среде.
Ключевые показатели эффективности (KPI) конвейера CI/CD
- Цикл или время развертывания: Время, необходимое для перехода от сборки к производству. Анализ тенденций выявляет узкие места в процессе доставки.
- Частота развертывания: Как часто вы выпускаете продукцию. Более частые и небольшие релизы снижают риски и упрощают устранение неполадок.
- Изменить время выполнения: Время от начала разработки до успешного развертывания. Отражает эффективность взаимодействия процессов планирования, кодирования и внедрения.
- Частота неудачных изменений: Процент развертываний, которые приводят к инцидентам или требуют отката. Tracотвечает за безопасность трубопровода.
- MTTR (среднее время до восстановления): Среднее время восстановления работы сервиса после сбоя. Показатель отказоустойчивости.
- MTTF (среднее время до отказа): среднее время между отказами. Tracдолговременная надежность.




