Что такое Continuous Delivery (CD)?

Ответ

Continuous Delivery (CD) — это практика разработки, при которой код всегда находится в состоянии, готовом к развертыванию в production. Это достигается за счет полностью автоматизированного пайплайна сборки, тестирования и подготовки релиза.

Ключевые принципы:

  1. Автоматизация всего пайплайна: от коммита до создания релизного артефакта.
  2. Готовность к релизу: любая успешно прошедшая пайплайн версия может быть немедленно выпущена.
  3. Ручное подтверждение для production: развертывание на «боевые» серверы требует явного одобрения (в отличие от Continuous Deployment).

Пример этапов CD-пайплайна (GitLab CI):

stages:
  - build
  - test
  - deploy:staging
  - deploy:production  # Требует ручного запуска

deploy_to_production:
  stage: deploy:production
  script:
    - echo "Deploying to production..."
    - ./deploy-prod.sh
  when: manual  # Ключевая настройка для Delivery
  only:
    - main

Практическая польза: CD минимизирует ручную работу, снижает риск ошибок при развертывании и позволяет выпускать обновления чаще и предсказуемее. Основное отличие от Continuous Deployment — наличие «ручного затвора» (manual gate) для выпуска в production.

Ответ 18+ 🔞

Да ты посмотри, что эти умники придумали! Continuous Delivery, блядь. Это ж когда твой код, сука, вечно готов, как солдат на посту, в любой момент на прод выехать. Не то что у нас — неделю накатываешь, потом три дня откатываешь, в рот меня чих-пых!

Смысл-то в чём, а? В том, чтобы весь этот цирк — сборку, тесты, упаковку — отдать на откуп железякам. Автоматизируешь пайплайн так, что он сам, сука, как часы, тикает. Закомитил — и пошла жара: собралось, проверилось, артефакт слепилось. И вот она, версия, уже лежит, подмигивает: «Запускай меня, чё уж». Но не тут-то было! Это ж Delivery, а не Deployment, ёпта. Тут тебе ручной затвор, блядь, последний бастион. На кнопку «Выпустить в прод» ты жмёшь сам, осознанно, с холодной головой и трясущимися руками.

Смотри, как в гите это выглядит, простейший пример:

stages:
  - build
  - test
  - deploy:staging
  - deploy:production  # А вот тут, сука, стоп-кран!

deploy_to_production:
  stage: deploy:production
  script:
    - echo "Делаем самое страшное..."
    - ./deploy-prod.sh
  when: manual  # Вот она, вся соль, блядь! Ручной запуск.
  only:
    - main

Видишь? when: manual. Это как предохранитель, ёбаный в рот. Всё автоматически доходит до этой черты, а дальше — стоп. Сидишь, смотришь на зелёные тесты, на артефакт, и думаешь: «Ну что, пацаны, погнали? Или ещё денька три побздим?».

И это, блядь, овердохуища полезно! Рутину убирает, ошибок от дурака-человека меньше, выпускать можно хоть каждый день, без этого вот «ой, всё сломалось, давайте откатываться». А отличие от Continuous Deployment — как небо и земля. В Deployment, сука, если всё прошло — оно само и поехало в прод, без спросу. А в Delivery — последнее слово за тобой, мудаком ответственным. Чихать хотел на все автотесты, если чуйка подсказывает, что сегодня не день. Вот и вся философия, в рот меня чих-пых!