در این پست قصد داریم که مفهوم Continuous Delivery، مزایا و معایب آن،ارتباط آن با DevOps، ابزار های موجود در این زمینه و شرکتهایی که در ایران این خدمات را محیا میکنند را معرفی کنیم.
تحویل مداوم (Continuous Delivery) اصطلاحی است که در سال 2010 و پس از گفتگوهایی در مورد Continuous Integration به وجود آمد. در سال 2006، مارتین فاولر از تمرین Continuous Integration کد توسعهدهنده در پایگاههای کد به روشی خودکار، کارآمد و به خوبی آزمایششده برای کاهش خطاها و تسریع توسعه نرمافزار حمایت کرد.
کتابی با عنوان Continuous Delivery توسط Jez Humble و David Farley تکنیکها را به کل چرخه عمر توسعه نرمافزار گسترش داد، بهویژه در مورد قرار دادن کد در محیطهای تولید بحث کرد. در این کتاب، ژز هامبل و دیوید فارلی، تحویل مستمر را به عنوان "عملی برای اطمینان از اینکه نرم افزار همیشه آماده استقرار است" تعریف می کنند. به عبارت دیگر، Continuous Integration تحویل مداوم (CD) یک رویکرد مهندسی نرمافزار است که در آن تیمها نرمافزار را در چرخههای کوتاه تولید میکنند و اطمینان حاصل میکنند که نرمافزار را میتوان به طور قابل اعتماد در هر زمان منتشر کرد و هنگام انتشار نرمافزار، بدون انجام دستی این کار را انجام داد. این تغییرات شامل انواع مختلفی از جمله ویژگیهای جدید، تغییرات پیکربندی، رفع اشکالها و آزمایشها است.بیایید این عمل را با جزئیات بیشتر توضیح دهیم.
تحویل مداوم به توسعهدهندگان اجازه میدهد تا آزمایشهای فراتر از آزمایشهای واحد را بهطور خودکار انجام دهند تا بتوانند بهروزرسانیهای برنامه را در ابعاد مختلف قبل از استقرار برای مشتریان تأیید کنند. این تست ها ممکن است شامل تست UI، تست بار، تست یکپارچه سازی، تست قابلیت اطمینان API و غیره باشد. این به توسعهدهندگان کمک میکند تا بهروزرسانیها را بهطور کاملتر اعتبارسنجی کنند و مشکلات را کشف کنند. با استفاده از فضای ابری، ایجاد خودکار و تکثیر چندین محیط برای آزمایش، که قبلاً انجام آن در محل دشوار بود، آسان و مقرون به صرفه است.
در اینجا یک سوال مهم مطرح میشود:
چرا Continuous Delivery ؟
اغلب فرض بر این است که اگر میخواهیم نرمافزار را به دفعات بیشتری مستقر کنیم، باید سطوح پایینتری از ثبات و قابلیت اطمینان را در سیستمهای خود بپذیریم. در واقع، تحقیقات بررسی شده نشان می دهد که اینطور نیست که تیم های با عملکرد بالا به طور مداوم خدمات را سریعتر و قابل اطمینان تر از رقبای کم عملکرد خود ارائه می دهند. این امر حتی در حوزه های بسیار تحت نظارت مانند خدمات مالی و دولتی نیز صادق است. این قابلیت، مزیت رقابتیباورنکردنی را برای سازمان هایی که مایل به سرمایه گذاری هستند، فراهم می کند.
تحویل مداوم و DevOps از نظر معانی مشابه هستند و اغلب با هم ترکیب می شوند، اما آنها دو مفهوم متفاوت هستند. DevOps دامنه وسیع تری دارد، و حول محور تغییرات فرهنگی، به ویژه همکاری تیم های مختلف درگیر در تحویل نرم افزار (توسعه دهندگان، عملیات، تضمین کیفیت، مدیریت، و غیره)، و همچنین خودکارسازی فرآیندها در تحویل نرم افزار متمرکز است. با DevOps، توسعهدهندگان، معمولاً در یک محیط توسعه استاندارد کدنویسی میکنند، از نزدیک با آزمایشکنندگان و تیمهای عملیات فناوری اطلاعات کار میکنند تا سرعت ساخت نرمافزار، تعهد کد، آزمایش واحد و انتشار را بدون از دست دادن قابلیت اطمینان، سرعت بخشند. از سوی دیگر، تحویل مستمر رویکردی برای خودکارسازی جنبه تحویل است و بر گردآوری فرآیندهای مختلف و اجرای سریعتر و مکرر آنها تمرکز دارد. بنابراین، DevOpsمی تواند محصول تحویل مداوم باشد و CDمستقیماً به DevOps جریان می یابد .
نتیجه اصلی اجرای DevOps یک خط لوله CI/CD است که توسط تیم های توسعه و عملیاتی که با یکدیگر با استفاده از یک روش چابک کار می کنند پشتیبانی می شود.
تحویل مداوم در مقابل یکپارچه سازی مداوم
یکپارچه سازی مداوم (CI) یک فرآیند خودکار برای یکپارچه سازی مداوم تغییرات توسعه نرم افزار است. فرآیندهای CI ساخت، آزمایش و اعتبارسنجی کد منبع را خودکار می کنند. با کار کردن با قابلیتهای CI، تیمهای توسعهدهنده چرخههای انتشار کد خود را تسریع میکنند، و این امر باعث میشود که با چرخههای طولانی توسعه ویژگیها و چالشهای ناشی از آن، مانند تداخل ادغام و کد شکسته، کمتر مواجه شوند. بنابراین، CI در مورد ادغام ویژگی های جدید و تغییرات کد در یک آرتیفکت است. در یک گردش کار توسعه معمولی، یک توسعه دهنده:
هدف CI تولید یک آرتیفکت بسته بندی شده است که آماده استقرار بر روی سرور یا ماشین است. نمونه ای از آرتیفکت می تواند یک فایل WAR/JAR یا هر کد بسته بندی شده اجرایی دیگری باشد. بنابراین، فعالیت های CI یک الزام برای CDاست.
با تحویل مداوم، هر تغییر کد ساخته میشود، آزمایش میشود و سپس به یک محیط آزمایش یا مرحلهبندی غیرتولیدی هدایت میشود. ممکن است چندین مرحله آزمایش موازی قبل از استقرار تولید وجود داشته باشد. تفاوت بین تحویل مداوم و استقرار مداوم وجود تأییدیه دستی برای به روز رسانی به تولید است. با استقرار مداوم، تولید به طور خودکار و بدون تأیید صریح اتفاق می افتد.
تحویل مداوم کل فرآیند انتشار نرم افزار را خودکار می کند. هر تجدیدنظری که انجام می شود یک جریان خودکار را راه اندازی می کند که به روز رسانی را ایجاد، آزمایش و سپس مرحله بندی می کند. تصمیم نهایی برای استقرار در یک محیط تولید زنده توسط توسعه دهنده انجام می شود.
تحویل مداوم بخشی از CI/CD را تشکیل می دهد، روشی برای ارائه مکرر نرم افزار با خودکارسازی برخی از مراحل توسعه برنامه است.
ابزارهای مختلفی وجود دارد که به انجام تمام یا بخشی از این فرآیند کمک می کند. این ابزارها بخشی از خط لوله استقرار هستند که شامل تحویل مداوم است. در ادامه چندین مورد ابزار کاربردی و معروف در این حوزه را معرفی میکنیم.
ابزار CircleCI که مورد اعتماد شرکتهای معروفی مانند Stitch Fix و Spotify است، یک ابزار تحویل مداوم است که بهطور یکپارچه با برنامهها و سرویسهای موجود، مانندAzure و Slack ادغام میشود. همچنین با فرآیند یکپارچه سازی مداوم شما یکپارچه می شود و به محض اینکه کد را به مخزن خود میبرید یک خط لوله ایجاد می کند. CircleCI به راحتی باGitHub و دیگر مخازن ادغام می شود.
CircleCI بیشترین محبوبیت را در بین مشاغل کوچک و متوسط دارد. برای این منظور، قابلیت های آن قابل تنظیم و مقیاس پذیر است تا متناسب با صنعت و اندازه شما باشد. به عنوان مثال، مشتریان این امکان را دارند که در فضای ابری CircleCI یا در زیرساخت خود میزبانی کنند. در هر صورت، کاربران CircleCI نیز می توانند از ایمن بودن کدشان مطمئن باشند.
برای صرفه جویی در زمان، CircleCI دارای تنظیمات قابل استفاده مجدد و اشتراک گذاری به عنوان کد و داشبورد، CircleCI Insights است. از طریق این ابزار، کاربران می توانند بر بهینه سازی خط لوله و ساخت پروژه از نظر وضعیت، مدت زمان و نتایج آزمایش نظارت کنند. البته توجه داشته باشید که داشبورد Insights در زمان واقعی نیست. مشاهده تغییرات ممکن است تا 24 ساعت طول بکشد.
ابزار CloudBees CD یک ابزار تحویل مداوم است که مجموعه ای چشمگیر از داشبوردهای قابل تنظیم را ارائه می دهد، به طوری که میتوانید داده ها را از زوایای مختلف مشاهده کنید. CloudBees CD که در بین مشاغل متوسط و شرکت های بزرگتر محبوب است، داده های بلادرنگ را در مورد وضعیت استقرار، فرکانس، توان عملیاتی و مدت زمان ارائه می دهد. اگر مشکلی پیش بیاید، قابلیت های نظارت آن از طریق داشبورد Workload Insights امکان بازگشت آسان را فراهم می کند.
برای اهداف آزمایشی، CloudBeesCD به شما امکان میدهد در محیطهای تولید مانند آزمایش کنید تا پیشنمایش تغییرات را دریافت کنید و نتایج آزمایش را در مرکز فرمان انتشار آن مشاهده کنید.
ابزار Jenkins که عمدتاً در شرکتهای متوسط استفاده میشود، بهعنوان یک سرور CI در دسترس است یا میتواند برای پشتیبانی و خودکارسازی فرآیند CD شما نیز گسترش یابد. در واقع، کاربران از نحوه خودکارسازی و ساده سازی فرآیند CI/CD لذت می برند. جنکینز با طیف گسترده ای از ابزارهای خارجی ادغام می شود، اما مراقب خزش و سازگاری ابزار باشید.
ادغام Jenkins با بسیاری از ابزارهای خارجی می تواند منجر به مشکلات ارتقاء شود. علاوه بر این، مطمئن شوید که جنکینز از نسخه ابزارهای خارجی که استفاده می کنید پشتیبانی می کند. اشکال اصلی جنکینز این است که تجربه کاربری آن به اندازه برخی ابزارهای موجود در بازار خوشایند یا شهودی نیست.
ابزار Harness یک ماژول تحویل مداوم به عنوان یک سرویس (CDaaS) است که از یادگیری ماشین برای ساده کردن SDLC به روشی امن، قابل پیشبینی و پایدار استفاده میکند. این شامل لاگ ها و داشبوردهای کاربر پسند است که با تجسم خط لوله کامل شده است تا بر کل فرآیند CI/CD نظارت داشته باشد. کاربران می توانند زمان تحویل، تغییر نرخ شکست و موارد دیگر را ارزیابی کنند.
Harness همچنین دارای یک ابزار نظارت است که امکان بازگشت آسان را در صورت لزوم فراهم می کند. کاربران هارنس که عمدتاً در مشاغل و شرکتهای متوسط استفاده میشود، از این که به مهندسان کنترل بیشتری بر ساختهای خود میدهد، قدردانی میکنند.
ابزار GitLab یک پلت فرم DevOps است که بر روی منبع باز در یک برنامه واحد برای زنجیره ابزار ساده تر و کنترل متمرکز بر SDLC ساخته شده است. GitLab پس از اینکه توسعه دهندگان کد را به مخزن با آزمایش، ایمن سازی و نظارت خودکار کد به مخزن متعهد کردند، کارهای سنگین را انجام می دهد. این هاب یک مرحلهای و کاربرپسند گردش کار را بهینه میکند و برای ساختهای مشترکی که نه تنها توسعهدهندگان، بلکه مدیران و طراحان میتوانند در آن مشارکت کنند، مفید است. با توجه به بسیاری از ویژگیهای GitLab در پلتفرم آن، شرکت شما میتواند به راحتی وارد ویژگیها شود، اما کاربران آن از آسانی استفاده از آن لذت میبرند.
برای بسیاری از برنامه نویسان و متخصصین Devops، ارائه محصول به صورت دوره ای از اهمیت ویژه ای برخوردار است.
در لاراهاست با ارائه سرویس Continuous Delivery، به این نیاز کاربران پاسخ داده تا بتوانند محصول خود را در سریع ترین زمان ممکن به محیط های Staging, Production برسانند.
این شرکت نیز سرویس Continuous delivery را برای ما فراهم میکند.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
https://continuousdelivery.com/
https://www.redhat.com/en/topics/devops/what-is-continuous-delivery
https://aws.amazon.com/devops/continuous-delivery/
https://devops.com/the-state-of-continuous-delivery-in-2021/
https://en.wikipedia.org/wiki/Continuous_delivery
https://www.synopsys.com/glossary/what-is-continuous-delivery.html
https://harness.io/blog/what-is-continuous-delivery/
http://lara-host.ir/continuous-delivery/
https://www.arvancloud.com/fa