Короткий ответ
CI — автоматическая сборка и тестирование кода при каждом изменении; Continuous Delivery — пайплайн доводит изменение до состояния «готово к выкладке», но выпуск в прод подтверждает человек; Continuous Deployment — выпуск в прод происходит автоматически без ручного шага.
Как это работает подробнее
при CI каждый коммит или pull request запускает сборку и тесты, чтобы быстро находить поломки. Continuous Delivery добавляет к этому автоматическую подготовку релизного артефакта и деплой на staging, но перед продакшеном стоит ручной approve. Continuous Deployment убирает этот ручной шаг — если все автоматические проверки прошли, изменение само попадает к пользователям.
Пример кода
example.yaml
stages:
- build
- test
- deploy_staging
- deploy_prod
deploy_prod:
stage: deploy_prod
script: ./deploy.sh prod
when: manual # ручной шаг — это Continuous Delivery, а не Continuous Deployment
environment: productionЧто использовать на практике
- На практике. многие команды, особенно в регулируемых отраслях (банки, медицина) или с высокой ценой ошибки, останавливаются на Continuous Delivery — им важен контроль момента релиза (например, не выкатывать в пятницу вечером). SaaS-продукты с хорошим покрытием тестами чаще выбирают полный Continuous Deployment.
- Пример. Наличие `when: manual` перед продакшен-деплоем — явный признак Continuous Delivery: релиз собран и проверен автоматически, но публикуется только после решения человека.
Подводные камни
- Частые ошибки. путают Continuous Delivery и Continuous Deployment, считая их синонимами; думают, что наличие любого пайплайна сборки уже означает «у нас CI/CD», даже если тестов нет или они не блокируют мердж.