Continuous Delivery در مقابل Continuous Deployment
Continuous Delivery یعنی هر تغییر کد بهصورت خودکار build، test و آمادهی استقرار میشود اما انتشار نهایی به production نیازمند تأیید دستی انسان است؛ Continuous Deployment یک قدم جلوتر میرود و هر تغییری که تستها را با موفقیت پشت سر بگذارد بدون هیچ دخالت انسانی مستقیماً در production منتشر میشود.
| ویژگی | Continuous Delivery | Continuous 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.
