Ответ
Continuous Delivery (Непрерывная поставка) и Continuous Deployment (Непрерывное развертывание) — это этапы автоматизации pipeline, отличающиеся степенью автоматизации релиза.
Определения:
- Continuous Delivery: Код автоматически проходит сборку, тестирование и упаковку, после чего готов к ручному развертыванию в production. Решение о релизе принимает человек.
- Continuous Deployment: Полная автоматизация. После успешного прохождения всех этапов pipeline код автоматически развертывается в production без ручного вмешательства.
Ключевое отличие: Наличие ручного шлюза (manual gate) перед production.
Визуализация процесса:
Develop -> CI (Build/Test) -> Staging Environment
│
Continuous Delivery ─────┤ (Ручное одобрение)
↓
Production Environment
│
Continuous Deployment ───┘ (Автоматически)
Пример настройки в GitHub Actions:
name: CI/CD Pipeline
on: [push]
jobs:
test-and-build:
runs-on: macOS-latest
steps:
- name: Run Tests
run: xcodebuild test -scheme MyApp
# Continuous Delivery Stage (ручной триггер)
deliver-to-testflight:
needs: test-and-build
if: github.ref == 'refs/heads/main'
runs-on: macOS-latest
steps:
- name: Upload to TestFlight
run: fastlane pilot upload # Требует ручного подтверждения в App Store Connect
# Continuous Deployment Stage (автоматический)
deploy-to-enterprise:
needs: test-and-build
if: github.ref == 'refs/heads/auto-release'
runs-on: macOS-latest
steps:
- name: Deploy to Enterprise Distribution
run: fastlane deploy # Автоматически распространяет билд
Выбор стратегии:
- Delivery подходит для приложений, где требуется контроль над временем релиза (например, мобильные приложения в магазинах).
- Deployment используется для сервисов, веб-приложений или внутренних инструментов, где важна скорость обновлений.