Что такое CI/CD: интеграция, доставка и развёртывание
Оглавление статьи

Короткий ответ
CI/CD — это практики и автоматизированный конвейер, который проверяет изменение кода и готовит его к выпуску. CI, continuous integration, регулярно собирает проект и запускает проверки. CD может означать continuous delivery — готовность проверенной версии к ручному выпуску — или continuous deployment, когда успешное изменение развёртывается автоматически.
CI/CD не равен одному YAML-файлу и не гарантирует качество сам по себе. Надёжный pipeline опирается на воспроизводимую сборку, полезные тесты, управляемые секреты, изолированные окружения, наблюдаемость и понятный откат.
CI, delivery и deployment: в чём разница
| Практика | Что автоматизируется | Где остаётся решение человека |
|---|---|---|
| Continuous Integration | Сборка, статические проверки и тесты каждого изменения | Ревью и слияние кода |
| Continuous Delivery | Подготовка проверенного артефакта и доставка до готового к выпуску состояния | Запуск production-релиза |
| Continuous Deployment | Весь путь успешного изменения до production | Правила, наблюдение и реакция на риск |
Слово CD неоднозначно, поэтому в документации проекта лучше писать delivery или deployment полностью. Ручное подтверждение production-релиза не делает процесс «неавтоматизированным»: оно может быть осознанным контрольным барьером.
Как работает CI/CD pipeline
Триггер. Push, pull request, merge request, тег, расписание или ручной запуск создаёт pipeline.
Чистое окружение. Runner получает код и заявленные зависимости.
Проверки. Запускаются форматирование, линтер, статический анализ и тесты, подходящие проекту.
Сборка артефакта. Создаётся один идентифицируемый пакет, бинарный файл или образ.
Проверка безопасности. Анализируются зависимости, секреты и собранный артефакт.
Staging. Та же версия развёртывается в тестовом окружении и проходит smoke- или end-to-end-проверки.
Production. Выпуск запускается автоматически либо после подтверждения.
Наблюдение и откат. Команда видит состояние релиза и может вернуть предыдущую рабочую версию.
В документации GitLab pipeline состоит из jobs и stages: задания внутри этапа могут выполняться параллельно, а последующие этапы обычно не стартуют после ошибки. В GitHub Actions workflow задаётся YAML-файлом, содержит события, jobs и steps и хранится вместе с кодом.
Минимальная конфигурация как модель
Синтаксис зависит от платформы, а команды — от проекта. Упрощённая схема ниже показывает порядок, а не готовый production-рецепт:
stages:
- verify
- build
- deploy
tests:
stage: verify
script:
- ./scripts/install-dependencies
- ./scripts/run-tests
package:
stage: build
script:
- ./scripts/build-artifact
artifacts:
paths:
- output/
deploy-staging:
stage: deploy
script:
- ./scripts/deploy stagingРеальные команды должны завершаться ненулевым кодом при ошибке. Закрепляйте версии среды и зависимостей, не печатайте секреты в лог, задавайте срок хранения артефактов и ограничивайте деплой правилами веток и окружений.
Зачем CI/CD проекту
одинаковые проверки запускаются для каждого изменения;
ошибка связывается с конкретным коммитом;
сборка воспроизводится вне компьютера разработчика;
ревьюер видит результаты тестов до слияния;
релиз использует известный артефакт, а не случайное состояние сервера;
действия и права деплоя можно журналировать;
маленькие выпуски проще наблюдать и откатывать.
Польза зависит от качества обратной связи. Медленный и нестабильный pipeline, который команда игнорирует, превращается в формальность.
Что должно храниться в репозитории
конфигурация workflow или pipeline;
скрипты установки, тестирования, сборки и миграций;
описание требуемых версий и зависимостей;
конфигурация инфраструктуры, если применяется IaC;
правила качества и безопасности;
инструкция по ручному запуску, откату и аварийной остановке.
Секреты в репозиторий не добавляют. Храните их в предназначенном для этого механизме платформы или внешнем менеджере секретов и выдавайте минимально необходимые права.
Как внедрить CI/CD по шагам
Сделайте локальную сборку воспроизводимой. Новый участник должен собрать и проверить проект по документированной команде.
Добавьте быстрый CI. Начните с линтера и критичных тестов на pull request.
Запретите слияние при обязательной красной проверке. Исключения должны быть видимыми и редкими.
Собирайте один артефакт. Продвигайте одну и ту же версию через окружения, не пересобирайте её перед production.
Создайте staging. Сделайте его достаточно похожим на production для значимых проверок.
Автоматизируйте delivery. Подготовьте релиз и оставьте ручное подтверждение, пока процесс не станет устойчивым.
Добавьте наблюдаемость и откат. До автоматического deployment команда должна понимать, как заметить и остановить плохой релиз.
Улучшайте узкие места. Разделяйте тесты, используйте безопасный кэш и устраняйте нестабильные проверки.
Как выбрать CI/CD-систему
| Критерий | Что проверить |
|---|---|
| Репозиторий | Есть ли встроенная система и единые права доступа |
| Runner | Облачный, self-hosted, поддерживаемые ОС и изоляция |
| Безопасность | Secrets, OIDC, защищённые окружения, аудит и approvals |
| Артефакты | Хранение, срок жизни, подпись и продвижение между stages |
| Масштаб | Параллелизм, очереди, monorepo и дочерние pipelines |
| Эксплуатация | Обновления, плагины, резервирование и стоимость владения |
Если репозиторий уже находится на GitHub или GitLab, встроенный инструмент часто даёт самый короткий путь. Self-hosted решение оправдано требованиями к сети, данным, средам выполнения или контролю, но добавляет обновления и обслуживание.
Безопасность pipeline
не запускайте недоверенный код с production-секретами;
разделяйте права CI и деплоя по окружениям;
закрепляйте внешние actions и зависимости на проверенных версиях;
проверяйте изменения файлов pipeline через code review;
используйте короткоживущие учётные данные, где это возможно;
не выводите токены и переменные в лог;
подписывайте и идентифицируйте выпускаемые артефакты;
храните журнал того, кто и что развернул.
Официальная справка GitHub по workflow syntax отдельно рекомендует указывать версию используемого action; ссылка на меняющуюся ветку может неожиданно изменить поведение сборки.
Типичные ошибки
добавлять деплой до воспроизводимой сборки и тестов;
считать зелёный pipeline доказательством отсутствия дефектов;
пересобирать артефакт отдельно для каждого окружения;
хранить секреты в YAML или образе;
запускать все тяжёлые проверки для каждого небольшого изменения;
игнорировать нестабильные тесты;
разрешать deploy job слишком широкие права;
не иметь health-check, мониторинга и процедуры отката;
копировать чужой YAML без понимания команд и модели угроз.
Чек-лист готовности
проект собирается в чистой среде;
обязательные проверки дают полезную и быструю обратную связь;
ошибка блокирует продвижение версии;
артефакт имеет уникальный идентификатор;
секреты отделены от кода и логов;
staging использует тот же артефакт, что и production;
права деплоя ограничены;
есть наблюдение после релиза;
откат описан и проверен;
ответственный понимает, как остановить pipeline.
Вывод
CI/CD начинается не с выбора сервиса, а с короткой и воспроизводимой проверки каждого изменения. Сначала автоматизируйте сборку и тесты, затем создайте версионируемый артефакт, delivery до staging, контролируемый production-релиз и откат. Такой путь даёт пользу постепенно и не превращает YAML в скрытую инфраструктуру, которую никто не умеет обслуживать.
Часто задаваемые вопросы
Как расшифровывается CI/CD?
CI — continuous integration, непрерывная интеграция. CD может означать continuous delivery, непрерывную доставку, или continuous deployment, непрерывное развёртывание.
Чем continuous delivery отличается от deployment?
При delivery проверенная версия готова к выпуску, но production-деплой подтверждает человек. При deployment успешное изменение развёртывается автоматически по заданным правилам.
Что входит в CI pipeline?
Минимально — получение кода, установка зависимостей, статические проверки, тесты и сборка. Конкретный набор зависит от технологии и рисков проекта.
Нужен ли CI/CD небольшому проекту?
Даже небольшому проекту полезен короткий CI с воспроизводимой установкой и тестами. Автоматический production-деплой нужен не всегда и требует наблюдаемости и отката.
GitHub Actions или GitLab CI/CD: что выбрать?
Если код уже размещён на одной из платформ, начните со встроенного инструмента. Сравните runners, права, secrets, окружения, аудит, ограничения сети и стоимость владения.
Где хранить секреты CI/CD?
В механизме secrets платформы или внешнем менеджере секретов. Не добавляйте ключи в репозиторий, YAML, Docker-образ или логи.
Почему pipeline проходит локально, но падает в CI?
Обычно различаются версии, переменные, зависимости, файловая система или скрытое локальное состояние. Закрепите окружение и воспроизведите команды в чистом контейнере или runner.
Как понять, что команда готова к continuous deployment?
Нужны устойчивые тесты, идентичный артефакт во всех окружениях, защищённые секреты, наблюдаемость, автоматические проверки здоровья и проверенная процедура быстрого отката.
Комментарии 0
Обсудите материал, задайте вопрос или дополните его своим опытом.
Комментарии доступны зарегистрированным пользователям. Почту нужно подтвердить один раз.
Начните обсуждение: задайте вопрос автору или поделитесь практическим опытом.