Ответ
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 используется для сервисов, веб-приложений или внутренних инструментов, где важна скорость обновлений.
Ответ 18+ 🔞
Давай разберем эту всю хуйню, пока голова не закипела, как утюг у деда в бане.
Вот смотри, есть два таких понятия — Continuous Delivery и Continuous Deployment. И они, блядь, как близнецы, но один с родинкой на жопе. Все их путают, а разница-то — одна человеческая кнопка, ёпта!
Continuous Delivery (CDel) — это когда твой код, как отличник, прошёл все тесты, собрался в красивый билд и стоит, готовый к бою, у самого порога продакшена. Но дверь ему не открывают! Ждёт он, сука, пока какой-нибудь проджект-менеджер или тимлид не нажмёт ручками кнопку «Выпустить». Это и есть тот самый ручной шлюз (manual gate). Код готов, но релиз — ручной.
Continuous Deployment (CDep) — это уже полный автоматический пиздец, мечта лентяя! Тут всё то же самое, но как только последний тест зелёный — система, не моргнув глазом, сама, без спросу, заливает это добро прямо в продакшен. Никаких ручных одобрений. Запустил — и побежал смотреть, не сломалось ли ничего. Скорость — овердохуищная, но и яиц надо стальных.
Короче, главная разница: Delivery — «всё готово, можно пускать?», Deployment — «я уже всё залил, вы что, не видели?».
Вот, смотри, как это выглядит в жизни:
Пишешь код -> Собирается/Тестится -> Тестовое окружение
│
Continuous Delivery ───────────────┤ (Тут сидит чел и думает: "Пускать? Не пускать? А может, чаю выпить?")
↓
Продакшен
│
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 (ручной)
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 # Загрузит, но в аппстор надо будет ещё ручками пойти и релиз подтвердить!
# Этап Continuous Deployment (автоматический)
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 — твой выбор, если релиз — это событие. Например, для мобильных приложений в App Store, где можно хуйнуть всё в один момент. Или когда заказчик — конченый перфекционист, который любит всё контролировать.
- Deployment — бери, если делаешь веб-сервис, внутренний инструмент или просто у тебя терпения ноль ебать, и хочешь, чтобы фичи летели в продакшен быстрее, чем мухи на говно.
Вот и вся философия. Либо ты контролируешь процесс, либо процесс начинает ебать тебя в сраку своей скоростью. Выбирай, но выбирай с умом, а то потом будешь, как Герасим, Муму в озеро кидать от безысходности.