CI/CD از آن دسته اصطلاحاتی است که همه دربارهٔ آن صحبت میکنند اما کمتر کسی تفاوت دقیق بین Continuous Delivery و Continuous Deployment را میداند. اگر تازه با این مفاهیم آشنا شدهاید یا میخواهید بدانید قابلیت "دیپلوی دستی" در لکسویا دقیقاً چه کاری انجام میدهد، این مقاله برای شماست.
CI/CD چیست؟
CI/CD مخفف Continuous Integration و Continuous Delivery (یا Continuous Deployment) است. این سه مفهوم با هم زنجیرهای را تشکیل میدهند که کد شما را از مرحلهٔ نوشتن تا استقرار در تولید (Production) همراهی میکند.
Continuous Integration (CI) — یکپارچهسازی مداوم
CI به معنی ادغام مداوم تغییرات کد در یک مخزن مشترک است. هر بار که یک توسعهدهنده کد خود را به مخزن اصلی (مثلاً GitHub) ارسال میکند (push یا pull request)، یک pipeline خودکار اجرا میشود که:
- کد را کامپایل و build میکند
- تستهای واحد (Unit Tests) و یکپارچگی (Integration Tests) را اجرا میکند
- کیفیت کد را با ابزارهایی مثل Linter و SonarQube بررسی میکند
- آسیبپذیریهای امنیتی را اسکن میکند
هدف CI این است که مطمئن شویم تغییرات جدید با بقیهٔ کدبیس سازگار است و چیزی را نشکسته است.
Continuous Delivery (CD) — تحویل مداوم
بعد از این که CI با موفقیت انجام شد، نوبت به Continuous Delivery میرسد. در این مرحله، نرمافزار به صورت خودکار build و آمادهٔ استقرار (Deploy) میشود، اما استقرار در تولید به صورت دستی و با تأیید یک انسان انجام میشود.
یعنی نرمافزار همیشه در وضعیت "قابل استقرار" (Deployable) است، اما شما تصمیم میگیرید که چه زمانی آن را به تولید بفرستید.
Continuous Deployment — استقرار مداوم
Continuous Deployment یک قدم فراتر میرود. در این مدل، هر تغییری که از CI عبور کند، به صورت خودکار و بدون دخالت انسان در تولید مستقر میشود. اگر همهٔ تستها با موفقیت گذر کرده باشند، کد به Production میرود.
تفاوت در یک نگاه
| مرحله | Continuous Integration | Continuous Delivery | Continuous Deployment |
|---|---|---|---|
| ادغام کد | ✅ خودکار | ✅ خودکار | ✅ خودکار |
| اجرای تست | ✅ خودکار | ✅ خودکار | ✅ خودکار |
| Build نهایی | ❌ | ✅ خودکار | ✅ خودکار |
| استقرار در Stage | ❌ | ✅ خودکار | ✅ خودکار |
| استقرار در Production | ❌ | ✅ دستی (با کلیک) | ✅ خودکار |
قابلیت "دیپلوی دستی" در لکسویا
لکسویا در سرویس PaaS (Platform as a Service) خود یک قابلیت کلیدی به نام دیپلوی دستی (Manual Deployment) ارائه میدهد که دقیقاً مرز بین Continuous Delivery و Continuous Deployment را مشخص میکند.
عملکرد این قابلیت ساده است:
- حالت پیشفرض (دیپلوی دستی خاموش): به محض این که کد جدیدی به مخزن شما ارسال شود (push)، لکسویا به صورت خودکار آن را build و در Production مستقر میکند. این همان Continuous Deployment است.
- حالت دیپلوی دستی روشن: بعد از هر push، لکسویا کد را build و آماده میکند، اما منتظر میماند تا شما به صورت دستی دکمهٔ "Deploy" را بزنید تا در Production مستقر شود. این همان Continuous Delivery است.
به عبارت دیگر، این یک دکمهٔ ساده است که مسیر CD شما را بین Delivery و Deployment تغییر میدهد.
کی از دیپلوی دستی استفاده کنیم؟
انتخاب بین Continuous Delivery و Continuous Deployment به ماهیت پروژه و تیم شما بستگی دارد. در اینجا راهنمایی برای تصمیمگیری ارائه میدهیم:
کی دیپلوی دستی را روشن کنیم؟ (Continuous Delivery)
۱. پروژههای حساس و حیاتی
اگر پروژه شما در حوزههای مالی، پزشکی، بانکداری یا هر جایی است که یک اشتباه میتواند هزینهٔ سنگینی داشته باشد، حتماً دیپلوی دستی را روشن کنید. بگذارید یک انسان قبل از استقرار، تغییرات را بررسی کند.
۲. تیمهای کوچک بدون تست کافی
اگر تیم شما پوشش تست (Test Coverage) بالایی ندارد یا CI pipeline شما کامل نیست، استقرار خودکار خطرناک است. دیپلوی دستی به شما فرصت میدهد قبل از استقرار، یک بررسی سریع (Sanity Check) انجام دهید.
۳. پروژههایی با SLA بالا
اگر پروژه شما SLA (توافقنامه سطح سرویس) بالایی دارد و نمیتوانید حتی چند دقیقه downtime داشته باشید، بهتر است استقرارها دستی باشند تا بتوانید بهترین زمان را برای دیپلوی انتخاب کنید.
۴. انتشارات برنامهریزیشده (Scheduled Releases)
اگر شرکت شما روی مدل انتشار نسخههای مشخص (مثلاً انتشار هفتگی یا ماهانه) کار میکند، دیپلوی دستی گزینهٔ مناسبتری است. تغییرات جمع میشوند و در زمان مقرر با هم به Production میروند.
کی دیپلوی دستی را خاموش کنیم؟ (Continuous Deployment)
۱. تیمهای بالغ با تستهای جامع
اگر تیم شما پوشش تست بالایی دارد (بیش از ۸۰٪) و CI pipeline شما شامل تستهای unit، integration، e2e و امنیتی است، میتوانید به CI اعتماد کنید و استقرار خودکار را فعال کنید.
۲. استارتاپها و MVPها
اگر در مراحل اولیهٔ یک محصول هستید و سرعت برایتان از پایداری مهمتر است (Move Fast)، Continuous Deployment به شما اجازه میدهد تغییرات را در عرض چند دقیقه به دست کاربران برسانید.
۳. سرویسهای internal و ابزارهای تیمی
برای سرویسهایی که کاربران محدودی دارند (مثل ابزارهای داخلی تیم)، استقرار خودکار ریسک پایینی دارد و سرعت توسعه را افزایش میدهد.
۴. سرورهای شخصی و پروژههای غیررسمی
اگر پروژهٔ شخصی یا یک اپلیکیشن غیررسمی دارید، Continuous Deployment بهترین گزینه است — کد را بزنید و بقیه را به لکسویا بسپارید.
نکات مهم
- ترکیب هر دو: میتوانید در پروژههای خود ترکیبی از هر دو رویکرد را داشته باشید. مثلاً برای شاخهٔ اصلی (main) از Continuous Deployment و برای شاخههای پایدار (stable release) از Continuous Delivery استفاده کنید.
- Feature Flags: حتی با Continuous Deployment هم میتوانید ویژگیهای ناقص را با استفاده از Feature Flag از کاربران مخفی کنید. این تکنیک به شما امکان استقرار مداوم بدون نمایش ویژگیهای ناتمام را میدهد.
- Rollback: صرفنظر از رویکردی که انتخاب میکنید، همیشه مطمئن شوید که قابلیت بازگشت به نسخهٔ قبلی (Rollback) را دارید. لکسویا این قابلیت را به صورت پیشفرض ارائه میدهد.
- از کوچک شروع کنید: اگر تردید دارید، با Continuous Delivery (دیپلوی دستی روشن) شروع کنید و بعد از اطمینان از کیفیت تستها و CI pipeline، به Continuous Deployment مهاجرت کنید.
"Continuous Deployment قرار نیست جایگزین فرایندهای کیفی شود، بلکه قرار است اطمینان شما از کیفیت را به سطحی برساند که بتوانید به CI/CD خود اعتماد کنید."
جمعبندی
CI/CD یک زنجیرهٔ کامل از توسعه تا استقرار است:
- CI — کد را ادغام و تست میکند
- Continuous Delivery — نرمافزار را آماده میکند اما استقرار دستی است (دیپلوی دستی روشن)
- Continuous Deployment — استقرار کاملاً خودکار است (دیپلوی دستی خاموش)
لکسویا با قابلیت "دیپلوی دستی" به شما امکان میدهد به سادگی بین این دو رویکرد جابجا شوید. اگر پروژهٔ حساسی دارید، دیپلوی دستی را روشن نگه دارید. اگر سرعت برایتان اولویت دارد و به تستهای خود اعتماد دارید، آن را خاموش کنید و بگذارید هر push به صورت خودکار به Production برود.
انتخاب با شماست — و لکسویا هر دو گزینه را در اختیارتان میگذارد.