تحویل مستمر یا Continuous Delivery که به اختصار CD نیز نامیده می شود، رویکردی در مهندسی نرم افزار است که تیم ها را قادر می سازد نرم افزار تولید شده را به روشی سریع و مطمئن برای تحویل آماده کنند. Continuous Delivery توانایی اعمال تغییرات در محیط عملیات در هر لحظه با روشی سریع و مطمئن و به طور کاملا پایدار می باشد. این تغییرات می تواند از هر نوعی باشد و شامل تغییرات پیکربندی در نرم افزار، زیر ساخت و پلتفرم، افزودن ویژگی های جدید و رفع باگ ها و خطاها می شود.
در ادامه به توضیحات بیشتر در مورد Continuous Delivery می پردازیم.
تحویل مستمر بخشی از CI/CD را تشکیل می دهد. CI/CD در واقع روشی برای ارائه ی مکرر نرم افزار با خودکار سازی برخی از مراحل توسعه برنامه به حساب می آید.
"CI" در CI/CD به ادغام پیوسته(Continuous Integration) اشاره دارد. با یکپارچه سازی مداوم، تغییرات کد جدید در یک برنامه به طور منظم ساخته، آزمایش و در یک مخزن مشترک ادغام می شوند. این موضوع یک راه حل برای مشکل داشتن branch های بیش از حد یک برنامه در حال توسعه به طور همزمان است که ممکن است با یکدیگر تضاد داشته باشند.
"CD" در CI/CD به تحویل مستمر اشاره دارد که روش هایی را برای خودکارسازی مراحل بعدی pipeline مربوط به CI/CD توصیف می کند.
در واقع Continuous Delivery توانایی پذیرش انواع تغییرات از جمله اضافه شدن امکانات جدید به برنامه، تغییرات پیکربندی و رفع خطاها به روشی سریع و پایدار است. در این رویکرد هدف این است که تیم توسعه ی نرم افزار همیشه آماده باشد تا جدیدترین نسخه ی نرم افزار تولیدی خود را در هر زمانی منتشر کند. همچنین حتی اگر تیم های توسعه متشکل از افراد زیادی باشند یا نرم افزار ما توزیع شده باشد، با استفاده از CD فرایند ارائه ی نرم افزار بصورت ساده و قابل پیش بینی و روتین تبدیل می شوند.
فرایند CD که معادل فارسی " تحویل مداوم یا مستمر" را می توان برای آن در نظر گرفت، یک رویکرد در توسعه و تولید نرم افزار می باشد که بر اساس آن تیم توسعه نرم افزار بصورت سریع و مطمئن، همواره آماده است تا جدیدترین نسخه از نرم افزار تولیدی را در هر زمانی منتشر کند. این فرایند از زمان اضافه شدن یا تغییر کد در سرور سورس کنترل شروع می شود و شامل بیلد، تست، پیکربندی و انتشار در محیط های گوناگون تستی یا عملیاتی می باشد. اهمیتی ندارند که تیم های توسعه چه تعداد بزرگ باشند و یا نرم افزاری که مد نظر است توزیع شده باشد یا خیر، با استفاده از CD فرایندهای شرح داده شده بصورت ساده و قابل پیش بینی و روتین تبدیل می شوند.
تفاوت Continuous Delivery و Continuous Deployment
تحویل مستمر (Continuous Delivery) و استقرار مستمر (Continuous Deployment)، در حالی که مفاهیم نزدیک به هم مرتبط هستند، گاهی اوقات به طور جداگانه برای تعیین میزان اتوماسیون در حال وقوع استفاده می شوند.تحویل مستمر معمولاً به این معنی است که تغییرات انجام شده توسط تیم توسعه به شکل خودکار از نظر داشتن باگ بررسی شده و سپس در یک مخزن (مانند GitHub) آپلود میشوند و سپس می توانند توسط تیم عملیات در یک محیط عملیاتی مستقر شوند. این مفهوم در واقع پاسخی برای رفع مشکل ارتباط ضعیف بین تیم توسعهدهنده و کسبوکار است و باعث میشود زحمت پیادهسازی تغییرات جدید به حداقل برسد.
استقرار پیوسته مربوط به انتشار خودکار تغییرات از مخزن تا مشاهده ی آن توسط کاربر است.این مفهوم راهی برای حل مشکل ایجاد سربار زیاد برای تیم عملیات، بهدلیل تنظیمات دستی مربوط به انتشار است که سرعت تحویل نرمافزار را کاهش میدهد.
چرا از Continuous Delivery استفاده می کنیم؟
اغلب فرض بر این است که اگر میخواهیم نرمافزار را به دفعات بیشتری مستقر کنیم، باید سطوح پایینتری از ثبات و قابلیت اطمینان را در سیستمهای خود بپذیریم. اما در واقع این طرز فکر صحیح نیست.تحقیقات انجامشده نشان می دهد تیمهای با عملکرد بالا به طور مداوم خدمات را سریعتر و قابل اطمینانتر از سایر تیم های با عملکرد پایین تر ارائه می کنند.
از مزایای تحویل مستمر می توان به موارد زیر اشاره کرد:
تحویل مستمر چگونه با DevOps مرتبط است؟
این دو مفهوم از جهاتی به هم نزدیک هستند اما تفاوت هایی نیز با هم دارند. DevOps مفهومی است که شیوه های توسعه و عملیات را با هم ترکیب می کند و علاوه بر خودکارسازی فرایند تحویل نرم افزار، تغییرات فرهنگی به خصوص ارتباط بین تیم های مختلف که در جریان آماده سازی و تحویل محصول نرم افزاری هستند را نیز در برمی گیرد و هدف آن افزایش ارزش کسبوکار و پاسخگویی از طریق ارائه خدمات سریع و با کیفیت بالا است.اما Continuous Delivery روشی برای خودکار سازی فرایند تحویل محصول است و بر این موضوع تمرکز دارد که فرایند های مرتبط در کنار هم طوری اجرا شود که منجر شود محصول نرم افزاری به دفعات متعدد و با سرعت بیشتر، امنیت بیشتر و ریسک کمتر به دست مشتری برسد. نتیجه اصلی اجرای DevOps یک خط لوله CI/CD است که توسط تیم های توسعه و عملیاتی که با یکدیگر با استفاده از یک روش چابک (agile) کار می کنند پشتیبانی می شود.
از جمله ابزار های مطرح Continuous Delivery می توان به CircleCI، Jenkis و GoCD اشاره کرد. در ادامه به بررسی این ابزارها می پردازیم.
ابزار Jenkis
یک ابزار خودکار سازی منبع باز است که ساخت مرکزی و فرآیند یکپارچه سازی مستمر در آن انجام می شود. این ابزار یک برنامه مستقل مبتنی بر جاوا است که قابل استفاده روی سیستم عامل های مختلف است. Jenkis به کاربران امکان می دهد pipeline مربوط به CI/CD را با پلاگین ها و رابط کاربری گرافیکی و همچنین کد ایجاد کنند. این ابزار از ساخت، استقرار و خودکارسازی پروژه های توسعه نرم افزار پشتیبانی می کند. ویژگی های کلیدی این ابزار عبارت است از:
اطلاعات بیشتر در مورد این ابزار از این لینک قابل مشاهده است.
ابزار CircleCI
این ابزار یک ابزار CI/CD است که از توسعه و انتشار سریع نرم افزار پشتیبانی می کند. CircleCI امکان اتوماتیک سازی در سراسر خط لوله (pipeline)، از ساخت کد، تست تا استقرار را فراهم می کند.
میتوانید CircleCI را با GitHub ادغام کرد. از ویژگی های این ابزار می توان به موارد زیر اشاره کرد:
اطلاعات بیشتر در مورد این ابزار در این لینک قابل دسترسی است.
ابزار GoCD
این ابزار نیز یک ابزار متن باز برای ساخت و انتشار نرم افزار است که از زیرساخت های مدرن در CI/CD پشتیبانی می کند. از ویژگی های این نرم افزار می توان به موارد زیر اشاره کرد:
اطلاعات بیشتر درباره ی GoCD را در این لینک ببینید.
از جمله شرکت های ایرانی فعال در این زمینه می توان به شرکت لاراهاست اشاره کرد.لاراهاست در زمینه ی ارائه ی تکنولوژی های روز دنیا در حوزه میزبانی وبسایت فعالیت می کند. در سایت این شرکت در مورد تحویل مستمر متن زیر آورده شده است:
برای بسیاری از برنامه نویسان و متخصصین Devops، ارائه محصول به صورت دوره ای از اهمیت ویژه ای برخوردار است.ما در لاراهاست برآن شدیم که با ارائه سرویس Continuous Delivery، به این نیاز کاربران ارج نهیم که بتوانند محصول خود را در سریع ترین زمان ممکن به محیط های Staging, Production برسانند.
از جمله دیگر شرکت های فعال در این زمینه کوالاتک است.مجموعه کوالاتک، ارائه دهنده خدمات تخصصی تست نرم افزار و تضمین کیفیت می باشد. این شرکت خدمات CI/CD خود را اینگونه توصیف کرده است:
ما در شرکت کوالاتک با بهرهگیری از متخصصان ارشد حوزه QA و انجام دهها پروژه مختلف آماده کمک به سازمانهای مختلف برای راه اندازی فرایند CI/CD میباشیم.
همچنین شرکت ابرآروان نیز از دیگر شرکت های ارائه کننده خدمات در این زمینه است.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
1- https://continuousdelivery.com
2- https://www.redhat.com/en/topics/devops/what-is-continuous-delivery
3- https://www.katalon.com/resources-center/blog/ci-cd-tools/
4- https://searchitoperations.techtarget.com/tip/5-open-source-continuous-delivery-tools-to-trial
5- https://aws.amazon.com/devops/continuous-delivery/
6- http://lara-host.ir/continuous-delivery/
7- https://qualatech.ir/ci-cd/