CI/CD (Continuous Integration / Continuous Deployment)

Практика, при которой каждое изменение кода автоматически собирается, проверяется тестами и доставляется на серверы.

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

Три буквы — три практики

  • CI — непрерывная интеграция. Разработчики часто, хотя бы раз в день, сливают изменения в общую ветку Git, и каждое слияние автоматически собирается и проверяется тестами.
  • Continuous Delivery — непрерывная доставка. Каждая успешно проверенная версия готова к выпуску, а сам выпуск — одна кнопка.
  • Continuous Deployment — непрерывное развертывание. Кнопки нет: прошедшая проверки версия выкатывается в работу автоматически.

Многие компании, особенно с регуляторными требованиями, останавливаются на непрерывной доставке: выпуск остается осознанным решением, но не ручной работой.

Как выглядит конвейер

# YAML (.gitlab-ci.yml, GitLab CI)
stages: [build, test, deploy]

build:
  stage: build
  script:
    - docker build -t registry.example.ru/billing:$CI_COMMIT_SHA .
    - docker push registry.example.ru/billing:$CI_COMMIT_SHA

test:
  stage: test
  script:
    - make test

deploy:
  stage: deploy
  script:
    - kubectl set image deployment/billing billing=registry.example.ru/billing:$CI_COMMIT_SHA
  when: manual

Конвейер GitLab CI собирает Docker-образ, запускает тесты и по кнопке обновляет приложение в Kubernetes. Если тесты упали, до выкатки дело не дойдет.

Типичные этапы

  1. Сборка и проверка стиля кода.
  2. Автоматические тесты: модульные, интеграционные, проверки API.
  3. Проверка безопасности: уязвимости в зависимостях и образах, утечки секретов.
  4. Выкатка на тестовый стенд и проверка на нем.
  5. Выкатка в работу — часто постепенная: сначала на небольшую долю пользователей.

Инструменты

В российских компаниях чаще всего используют GitLab CI, также распространены Jenkins и TeamCity; в открытых проектах — GitHub Actions. Инфраструктуру конвейер может менять тем же способом через Terraform.

Что нужно, чтобы CI/CD работал

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