

Continuous Delivery چیست ؟
Continuous Delivery یا (CD)، رویکردی در مهندسی نرمافزار است که تیمها را قادر میسازد نرمافزار تولید شده را به روشی سریع و مطمئن برای انتشار و تحویل آماده کنند. این فرایند از لحظه اضافه شدن یا تغییر کد در source control شروع میشود و شامل بیلد، تست، پیکربندی و انتشار در محیطهای مختلف تست و محیط عملیات میشود. این مفهوم در فارسی به تحویل مداوم یا تحویل مستمر ترجمه شده است.
تعریف Continuous Delivery چیست؟
در حقیقت CD توانایی اعمال تغییرات در محیط عملیات در هر لحظه با روشی سریع و مطمئن و به طور کاملا پایدار است. این تغییرات شامل همه انواع آن از جمله تغییرات پیکربندی در نرمافزار، زیرساخت و پلتفرم، افرودن ویژگیهای جدید، رفع باگ و خطاها میشود.
به وسیله محیطهای تست مختلف، میتوان یک Release Pipeline ایجاد کرد تا بتوان یک زیرساخت جدید را به طور اتوماتیک ایجاد کرد و نرمافزار را روی آن منتشر کرد. منظور از زیرساخت، سرور، سیستم عامل، سرویس دهنده وب، virtualization، شبکه و پیکربندی و تنظیمات آنها است. به کمک این محیطهای متوالی میتوان فعالیتهای طولانیIntegration، تست عملکرد و تستهای پذیرش نهایی را به تدریج انجام داد. فرایند Continuous Delivery در Release Pipeline با Continuous Integration شروع میشود و با انتشار و پایان تست در هر محیط، انتشار و تست در مرحله بعدی شروع خواه شد. مجموع این کارها به صورت حلقههای یک زنجیر در پشت سر هم قرار میگیرند و فرایند Continuous Delivery را تشکیل میدهند.
هدف Continuous Delivery چیست؟
هدف CD این است که که انتشار و تحویل نرمافزار را به خصوص برای سیستمهای توزیع شده در مقیاس بسیار بزرگ و محیطهای عملیاتی پیچیده به یک فرایند روتین، ساده و قابل پیشبینی تبدیل کند. رسیدن به این هدف تنها در صورتی امکانپذیر است که کدهای نرمافزار همیشه در وضعیت آماده برای انتشار باشند، حتی در شرایطی که یک تیم با هزاران توسعه دهنده به طور روزانه در حال تغییر و به روزرسانی کدها و نرمافزار هستند. به این ترتیب روش سنتی فازهای ادغام (Integration)، تست، پیکربندی و Hardening جای خود را به روشهای اتوماتیک میدهد. همچنین زمان آماده شدن برای انتشار، زمان مهاجرت به محیطهای دیگر (Time to Remediate) و زمان برطرف کردن رخداد در محیط عملیات را کاهش (Time To Mitigate or time to remediate production incidents) میدهد.
تفاوت Continuous Delivery و Continuous Deployment چیست؟
بسیاری از مواقع دو مفهوم Continuous Delivery و Continuous Deployment به اشتباه به جای هم استفاده میشوند اما تقاوت این دو چیست؟ Continuous Deployment به این معنی است که هر تغییر در نرمافزار به طور اتوماتیک (یا بر طبق یک زمانبندی مشخص) در محیط عملیات منتشر شود اما Continuous Delivery به این معنی است که هر تغییر در نرمافزار، آماده انتشار در هر محیطی باشد اما ممکن است تصمیم این باشد که منتشر نشود (معمولا به دلایل کسبوکاری). این محیطها شامل محیط تست تیم توسعه، محیط تست تیم کنترل کیفیت و محیط عملیات و هر محیط دیگری میشود.
تفاوت Continuous Delivery و دواپس چیست ؟
این دو مفهوم از جهاتی به هم نزدیک هستند اما تفاوتهای بنیادی با هم دارند. دامنه DevOps بسیار گستردهتر از CD است و علاوه بر خودکارسازی فرایند تحویل نرمافزار، شامل تغییرات فرهنگی به خصوص ارتباط بین تیمهای مختلفی که در جریان آمادهسازی و تحویل محصول نرمافزاری (Software Delivery) است، هم میشود (از جمله تیمهای توسعه، عملیات، تضمین کیفیت، مدیریت و … ) اما Continuous Delivery روشی است برای اتوماتیکسازی زنجیره تحویل محصول و بر این موضوع تمرکز دارد که فرایندهای مرتبط در کنار هم طوری اجرا شده که منجر شود محصول نرمافزاری، سریعتر، امنتر و با تکرار بیشتری به دست مشتری برسد.
در نبود Continuous Delivery چه اتفاقی میافتد؟
در نبود CD، انتشار نرمافزار یک bottleneck برای تیمهای «عملیات فناوری اطلاعات» و در نهایت برای محصول است. فرایند دستی و غیراتوماتیک، باعث انتشارهای غیر قابل اتکا، با تاخیر و پر از خطا میشود. تیمهای درگیر این موضوع معمولا به کارهای دستی تکیه میکنند که باعث ایجاد مشکلات جدی خواهد شد.
- حداقل الزامات اجرای Continuous Delivery
- برای راهاندازی و اجرای Continuous Delivery الزاماتی وجود دارد که در کمترین حالت میتوان از دو مورد زیر نام برد:
زیربنایی از تستها که تا حد قابل قبولی خیال شما را از این که نرمافزار به درستی کار میکند، راحت کرده و به شما اعتماد به نفس لازم را برای شروع استقرار بدهد. - ابزارهای خودکارسازی (Automation) و اسکریپتهای لازم که به شما اطمینان دهد استقرار با موفقیت انجام خواهد شد و در صورت نیاز به امکان Rollback وجود خواهد داشت.
جمعبندی
در آخر باید این این نکته را اضافه کنم که فرایند Continuous Delivery و Infrastructure as Code و Monitoring به طور قابل ملاحظهای مکمل یکدیگر هستند. Continuous Delivery برای کنترل تاثیر تغییرات در محیط عملیاتی از استراتژیهای استقرار از جمله Blue-Green Deployment و همچنین تکنیک Feature Flags (یا Feature Toggles) نیز پشتیبانی میکند. امروزه ارزشهایی که CD برای سازمانها ایجاد میکند، آن را به یک نیاز ضروری تبدیل کرده است. برای رساندن ارزش به مشتریان نهایی، باید محصول را به طور پیوسته و بدون خطا منتشر کرد. Release Pipelineهای پیشرفته به توسعهدهندگان اجازه میدهد که featureهای جدید را سریع و مطمئن منتشر کنند. با کمک CD، رفع خطاها در محیط عملیات و اضافه کردن ویژگیهای جدید بسیار سریعتر و با اطمینان بالا انجام خواهد شد و به دست مشتری خواهد رسید.