مفهوم Continuous Delivery یا به اختصار CD که معادلی همچون «تحویل مداوم» میتوان برایش در نظر گرفت به رویکردی در صنعت توسعهٔ نرمافزار گفته میشود که طی آن تیم مهندسی همواره این آمادگی را دارا است تا آخرین نسخه از نرمافزار را در هر زمانی منتشر نماید که این نسخه میتواند شامل قابلیتهای جدید، تغییرات پیکربندی، رفع باگها و ... باشد.
در حقیقت، CD این تضمین را ایجاد میکند که مشتری در هر لحظهای که اراده کند نسخهٔ جدید نرمافزار باید قابلانتشار بوده و تیم مهندسی از این بابت نباید هیچگونه واهمهای داشته باشد و این مهم زمانی عملی میگردد که همیشه آمادگی این را داشته باشیم تا نسخهای بهروز، بدون باگ و پایدار از نرمافزار را در اختیار مشتری قرار دهیم حتی اگر تیم توسعهٔ نرمافزار شامل دهها و یا صدها دولوپر از اقصی نقاط جهان باشد (به خاطر داشته باشیم که در اینجا منظور از مشتری هم میتواند یک شرکت دیگر و هم یک دپارتمان دیگر داخل شرکت نرمافزاری باشد.)
تفاوت Continuous Delivery با Continuous Deployment؟
لازم به یادآوری است که سرواژهٔ CD مخفف واژگان Continuous Deployment به معنی «انتشار مداوم» نیز میباشد که طی آن نسخههای پایدار و بدون باگ نرمافزار به صورت خودکار روی سرور دیپلوی (ارسال) میشوند و نیاز به توضیح نیست که در چنین شرایطی ممکن است در طول روز چندین نسخهٔ جدید از نرمافزار روی سرور دیپلوی گردد اما در «تحول مداوم» گرچه نرمافزار کماکان آمادهٔ دیپلوی است، اما انتشار یا عدم انتشار آن بستگی به نظر و ارادهٔ تیم توسعهٔ نرمافزار دارد (نیاز به توضیح نیست برای آنکه قادر گردیم «انتشار مداوم» انجام دهیم، میباید ابتدا پروسهٔ «تحویل مداوم» را با موفقیت پشت سر بگذاریم.)
چه ارتباطی مابین Continuous Delivery و Continuous Integration وجود دارد؟
مفهوم Continuous Integration به تست، بیلد، ادغام و یکپارچهسازی سورسکد در محیط توسعهٔ نرمافزار مرتبط است به طوری که طی آن دائماً نسخههای جدید نرمافزار با ریپازیتوری اصلیاش ادغام میگردد به طوری که در عین حال این تضمین نیز ایجاد میگردد که در کدهای جدید هیچگونه مشکلی وجود نداشته و بخشهای جدیدی که به سورسکد اضافه شدهاند با الباقی ماژولها سازگار هستند اما این در حالی است که Continuous Delivery گام بعدی محسوب میشود به این معنی که پس از آپدیت شدن سورسکد، تیم مهندسی با بررسیهای بیشتر این اطمینان را میدهد که نرمافزار در هر لحظهای که مشتری اراده کند قابلانتشار است.
یکی از نقاط قوت کلیدی CD آن است که فرآیند دریافت فیدبک (بازخورد) از کاربران را تسریع مینماید. در واقع، زمانی که ما با سرعت بیشتری فیچرهای جدید را در معرض استفادهٔ کاربران نرمافزار یا اپلیکیشن قرار میدهیم، به همان میزان هم سریعتر میتوانیم از ایشان فیدبک بگیریم و در صورت نیاز دست به اِعمال تغییرات بزنیم. به طور کلی، دیگر مزیتهای CD عبارتند از:
- انتشار نرمافزار با حداقل ریسک: نیاز به توضیح نیست که هدف از «تحویل مداوم» آن است که انتشار نسخههای جدید از نرمافزار یا اپلیکیشن را با حداقل استرس و ریسک در هر لحظهای بنا به صلاحدید مشتری انجام داد.
- بهروزرسانی سریعتر: با آنچه تاکنون گفته شد، نیاز به توضیح نیست که CD تیمهای مهندسی را قادر میسازد تا همواره در سریعترین زمان ممکن کاربران/مشتریان خود را با نسخههای جدید نرمافزار خوشحال نمایند.
- کیفیت بیشتر: زمانی که به طور مستر آپدیتهای کوچکی در نرمافزار صورت میگیرد، این تضمین ایجاد میگردد که همواره نسخهٔ فعلی نسبت به نسخهٔ قبلی بهبود یافته است و همین مسئله منجر بدین خواهد شد تا کیفیت نرمافزار ارتقاء یابد.
- فشار روانی کمتر روی دولوپرها: وقتی CD پروسهٔ انتشار نسخههای جدید نرمافزار را تسهیل میکند این بدان معنا است که افراد دخیل در این پروسه همچون برنامهنویسان و نیروهای عملیاتی یا به بیان بهتر دوآپس فشار کمتری را متحمل خواهند شد و همین مسئله باعث رضایت شغلی بیشتر ایشان خواهد شد و بالتبع به جای مسائل جانبی و حاشیهای، ایشان میتوانند روی موضوعات کلیدیتری همچون اِعمال الگوریتمهای بهتر، تجربهٔ کاربری خوبتر و چیزهایی از این دست تمرکز کنند.
هدف Continuous Delivery؟
هدف CD این است که که انتشار و تحویل نرم افزار را به خصوص برای سیستم های توزیع شده در مقیاس بسیار بزرگ و محیط های عملیاتی پیچیده به یک فرایند روتین، ساده و قابل پیش بینی تبدیل کند. رسیدن به این هدف تنها در صورتی امکان پذیر است که کدهای نرم افزار همیشه در وضعیت آماده برای انتشار باشند، حتی در شرایطی که یک تیم با هزاران توسعه دهنده به طور روزانه در حال تغییر و به روزرسانی کد ها و نرم افزار هستند. به این ترتیب روش سنتی فازهای ادغام (Integration)، تست، پیکربندی و Hardening جای خود را به روش های اتوماتیک می دهد. همچنین زمان آماده شدن برای انتشار، زمان مهاجرت به محیطهای دیگر (Time to Remediate) و زمان برطرف کردن رخداد در محیط عملیات را کاهش (Time To Mitigate or time to remediate production incidents) می دهد.
پایپلاین یا خط لوله استقرار :
تحویل پیوسته به وسیله خط لولهها فعال و پیاده میشود. خط لولهها سه هدف دارند: قابل مشاهده بودن، بازخورد، استقرار پیوسته.
قابل مشاهده بودن: تمام مراحل استقرار از جمله ساخت، استقرار، تست و انتشار به منظور همکاری، برای اعضای تیم قابل مشاهده است.
بازخورد: اعضای تیم به محض اتفاق افتادن خطا آنها را مطالعه میکنند و تلاش میکنند که هرچه سریعتر مشکل را حل کنند.
استقرار پیوسته: با استفاده از یک فرايند کاملا خودکار، هر نسخه از محصول در هر محیط به صورت خودکار نصب شود.
ابزارهای مطرح و متن باز (Open Source) در سال 2021 برای CD:
در ادامه به معرفی برخی از ابزارهای متن باز ، پرداخته میشود.
1- ابزار GOCD:
ابزار GoCD ابزاری اپنسورس تحت لیسانس آپاچی است که نقش یک سرور Continuous Delivery را بازی میکند به طوری که با محیطهایی همچون AWS ،Docker و Kubernetes به خوبی سازگار است.
طبق ادعای سایت رسمی این ابزار اپنسورس، یکی از شاخصههای GoCD آن است که به منظور دریافت هرچه سریعتر بازخورد میتوان وُرکفلوهای پیچیدهای با آن ایجاد کرد و این در حالی است که این کار بدون نیاز به نصب هیچگونه پلاگین خاصی امکانپذیر است مضاف بر اینکه GoCD این امکان را فراهم میآورد تا با رصد کردن تکتک تغییرات، از کامیتها گرفته تا پروسهٔ دیپلوی، مشکلات را ریشهیابی کرد که این کار از طریق ابزارهای مقایسهای که در این ابزار گنجانده شدهاند امکانپذیر است.
لازم به یادآوری است که مجموعهای از پلاگینهای کاربردی نیز توسعه داده شده که برخی رایگان و برخی نیز پریمیوم هستند که به منظور ارتقاء قابلیتهای GoCD میتوانند مورد استفاده قرار گیرند.
2- ابزار Jenkins X:
ابزار Jenkins X نسخه به روز شده Jenkins شناخته شده است و بر اساس ویژگی های موجود Jenkins با قابلیت های متناسب با گردش کار Kubernetes و Docker ایجاد شده است. همچنین شامل ویژگی هایی برای خطوط لوله از پیش ساخته شده، پشتیبانی یکپارچه GitOps، محیط های پیش نمایش خودکار تولید شده و ادغام بازخورد است. ابزار Jenkins X با Tekton، Prow، Helm، Knative و Skaffold ادغام می شود و البته میتوانید از آن در دستگاههای لینوکس، مک یا ویندوز استفاده کنید.
3- ابزار Argo CD:
این ابزار Argo CD یک ابزار و پروژه منبع باز CI/CD برای توسعه Kubernetes است. از مخازن Git برای ذخیره وضعیت برنامههای Kubernetes استفاده میکند، برنامهها را نظارت میکند و میتواند خوشهها را به حالت دلخواه مجدداً همگامسازی کند، همانطور که در پیکربندی git نشان داده شده است.
این رویکرد نوآورانه همچنین به شما امکان میدهد چندین حالت دلخواه یک برنامه Kubernetes را با استفاده از شاخهها، تگها یا با پین کردن نسخههای مانیفست با استفاده از commit Git ذخیره کنید. این یک محیط انعطاف پذیر برای مدیریت پیکربندی های Kubernetes در طول فرآیند توسعه فراهم می کند.
معرفی شرکتهای ایرانی مطرح در حوزه تحویل مداوم:
1- یکی از شرکتهای ایرانی فعال شرکت داده کاوان تصمیم یار به شماره ثبت: 576694 و شناسه ملی: 14009978163 در زمینه ارائه ، مشاوره و آموزش خدمات نرم افزاری به سازمانهای دولتی و خصوصی فعالیت مینماید. شرکت داده کاوان تصمیم یار خدمات مختلف نرم افزاری ارائه میدهد که یکی از آنها “کوالاتک” نام دارد که “تست اتوماتیک نرم افزار و تضمین کیفیت” میباشد. تیم کوالاتک متشکل از کارشناسان ارشد دانشگاه صنعتی شریف است که کیفیت دغدغه آنهاست. در شرکت کوالاتک با بهرهگیری از متخصصان ارشد حوزه QA و انجام دهها پروژه مختلف آماده کمک به سازمانهای مختلف برای راه اندازی فرایند CI/CD نیز مشاوره تخصصی انجام میپذیرد.
2- واحد مشاوره شرکت “مشاوره مدیریت رایزن سامانه گستر” با تکیه بر دانش فنی و تجربیات کارشناسان و مشاوران خود و همچنین تجربه های سازمانی کسب شده در پروژه های بزرگ و کوچک خود، آماده ارائه سبد متنوعی از خدمات در حوزه مشاوره و استقرار استانداردها، چارچوبها و بهروشها در سازمانها و شرکتها در ابعاد مختلف میباشد. در قالب 5 گروه خدمتی این شرکت انجام وظیفه میکند که یکی از آنان خدمات در حوزه مدیریت امنیت و استمرار خدمات فناوری اطلاعات میباشد.
جمع بندی:
رویکرد Continuous Delivery توانایی اعمال تغییرات در محیط عملیات در هر لحظه با روشی سریع و مطمئن و به طور کاملا پایدار می باشد. این تغییرات شامل همه انواع آن از جمله تغییرات پیکربندی در نرم افزار، زیرساخت و پلتفرم، افرودن ویژگی های جدید، رفع باگ و خطا ها می شود. در ادامه نیز به معرفی برخی از شرکتهای ایرانی فعال در این حوزه و همچنین چندابزار مطرح معرفی شد.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.
منابع:
https://devops.com/7-popular-open-source-ci-cd-tools/amp/
http://hidevops.com/143/continuous-delivery-%DA%86%DB%8C%D8%B3%D8%AA/
https://fa.m.wikipedia.org/wiki/%D8%AA%D8%AD%D9%88%DB%8C%D9%84_%D9%BE%DB%8C%D9%88%D8%B3%D8%AA%D9%87
https://sokanacademy.com/glossary/continuous-delivery
https://www.softwaretestinghelp.com/best-continuous-delivery-tools/amp/
https://qualatech.ir/ci-cd/
https://www.lordlikely.com/news/7-15/
Chen, Lianping (2017). "Continuous Delivery: Overcoming adoption challenges". Journal of Systems and Software. 128: 72–86/ doi:10.1016/j.jss.2017.02.013
http://rayzansamaneh.com/