CodeShot

Continuous Delivery در مقابل Continuous Deployment

Continuous Delivery یعنی هر تغییر کد به‌صورت خودکار build، test و آماده‌ی استقرار می‌شود اما انتشار نهایی به production نیازمند تأیید دستی انسان است؛ Continuous Deployment یک قدم جلوتر می‌رود و هر تغییری که تست‌ها را با موفقیت پشت سر بگذارد بدون هیچ دخالت انسانی مستقیماً در production منتشر می‌شود.

ویژگیContinuous DeliveryContinuous Deployment
تایید نهایی قبل از productionدستی (انسانی)خودکار (بدون دخالت انسان)
سرعت انتشارکندتر (وابسته به زمان‌بندی تایید)سریع‌تر (بلافاصله پس از عبور تست‌ها)
نیاز به پوشش تستبالابسیار بالا (تنها خط دفاعی است)
مناسب برایمحصولات با محدودیت رگولاتوری/کسب‌وکارمحصولات SaaS با استقرار مکرر

کِی از Continuous Delivery استفاده کنیم؟

در تیم‌هایی که نیاز به تأیید نهایی کسب‌وکار، محدودیت‌های قانونی/رگولاتوری یا کنترل زمان‌بندی انتشار (مثلاً هماهنگی با کمپین بازاریابی) دارند از Continuous Delivery استفاده کنید.

کِی از Continuous Deployment استفاده کنیم؟

در تیم‌هایی با پوشش تست بسیار قوی و اعتماد بالا به pipeline که می‌خواهند سریع‌ترین چرخه بازخورد و کوچک‌ترین batch سایز تغییرات را داشته باشند، از Continuous Deployment استفاده کنید.

مثال Continuous Delivery

# GitHub Actions - build/test/stage automatically, manual approval gate before prod
jobs:
  deploy-prod:
    needs: [build, test, deploy-staging]
    environment:
      name: production   # requires manual reviewer approval
    steps:
      - run: ./deploy.sh prod

مثال Continuous Deployment

# GitHub Actions - auto-deploy to prod on every merge to main, no gate
on:
  push:
    branches: [main]
jobs:
  deploy:
    steps:
      - run: npm test
      - run: ./deploy.sh prod   # runs automatically, no approval

اشتباه رایج

خیلی‌ها این دو را مترادف می‌دانند و می‌گویند "ما CD داریم" بدون مشخص کردن کدام‌یک؛ تفاوت اصلی صرفاً وجود یا عدم وجود gate تأییدِ انسانی پیش از انتشار نهایی در production است، نه اینکه آیا pipeline خودکار وجود دارد یا نه (هر دو خودکار هستند).

جمع‌بندی

اگر هنوز یک انسان دکمه انتشار نهایی را می‌زند → Continuous Delivery؛ اگر pipeline خودش تصمیم به انتشار می‌گیرد → Continuous Deployment.