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. Если тесты упали, до выкатки дело не дойдет.
Типичные этапы
- Сборка и проверка стиля кода.
- Автоматические тесты: модульные, интеграционные, проверки API.
- Проверка безопасности: уязвимости в зависимостях и образах, утечки секретов.
- Выкатка на тестовый стенд и проверка на нем.
- Выкатка в работу — часто постепенная: сначала на небольшую долю пользователей.
Инструменты
В российских компаниях чаще всего используют GitLab CI, также распространены Jenkins и TeamCity; в открытых проектах — GitHub Actions. Инфраструктуру конвейер может менять тем же способом через Terraform.
Что нужно, чтобы CI/CD работал
Автоматизация не заменяет дисциплину. Нужны тесты, которым можно доверять, небольшие изменения вместо огромных веток, код-ревью перед слиянием и быстрый откат, если что-то пошло не так. CI/CD — центральная практика DevOps: с ней обновления выходят чаще, а сбоев становится меньше, потому что каждое изменение маленькое и проверенное.