مقدمه‌ایی بر Continuous Delivery

مقدمهدر این پست قصد داریم که مفهوم Continuous Delivery، مزایا و معایب آن،ارتباط آن با DevOps، ابزار های موجود در این زمینه و شرکت‌هایی که در ایران این خدمات را محیا می‌کنند را معرفی کنیم.تحویل مداوم (Continuous Delivery)تحویل مداوم (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، توسعه‌دهندگان، معمولاً در یک محیط توسعه استاندارد کدنویسی می‌کنند، از نزدیک با آزمایش‌کنندگان و تیم‌های عملیات فناوری اطلاعات کار می‌کنند تا سرعت ساخت نرم‌افزار، تعهد کد، آزمایش واحد و انتشار را بدون از دست دادن قابلیت اطمینان، سرعت بخشند. از سوی دیگر، تحویل مستمر رویکردی برای خودکارسازی جنبه تحویل است و بر گردآوری فرآیندهای مختلف و اجرای سریعتر و مکرر آنها تمرکز دارد. بنابراین، DevOpsمی تواند محصول تحویل مداوم باشد و CDمستقیماً به DevOps جریان می یابد .نتیجه اصلی اجرای DevOps یک خط لوله CI/CD است که توسط تیم های توسعه و عملیاتی که با یکدیگر با استفاده از یک روش چابک کار می کنند پشتیبانی می شود.تحویل مداوم در مقابل یکپارچه سازی مداومیکپارچه سازی مداوم (CI) یک فرآیند خودکار برای یکپارچه سازی مداوم تغییرات توسعه نرم افزار است. فرآیندهای CI ساخت، آزمایش و اعتبارسنجی کد منبع را خودکار می کنند. با کار کردن با قابلیت‌های CI، تیم‌های توسعه‌دهنده چرخه‌های انتشار کد خود را تسریع می‌کنند، و این امر باعث می‌شود که با چرخه‌های طولانی توسعه ویژگی‌ها و چالش‌های ناشی از آن، مانند تداخل ادغام و کد شکسته، کمتر مواجه شوند. بنابراین، CI در مورد ادغام ویژگی های جدید و تغییرات کد در یک آرتیفکت است. در یک گردش کار توسعه معمولی، یک توسعه دهنده:کدها را بنویسیدکد را با استفاده از سیستم کنترل نسخه / ابزار مدیریت پیکربندی بررسی می کنداین پایگاه کد جدید یک فرآیند ساخت را طی می کنداین سازه در یک مصنوع بسته بندی شده استو سپس، مصنوع در یک مخزن ذخیره می شود.هدف CI تولید یک آرتیفکت بسته بندی شده است که آماده استقرار بر روی سرور یا ماشین است. نمونه ای از آرتیفکت می تواند یک فایل WAR/JAR یا هر کد بسته بندی شده اجرایی دیگری باشد. بنابراین، فعالیت های CI یک الزام برای CDاست.تحویل مداوم در مقابل استقرار مداومبا تحویل مداوم، هر تغییر کد ساخته می‌شود، آزمایش می‌شود و سپس به یک محیط آزمایش یا مرحله‌بندی غیرتولیدی هدایت می‌شود. ممکن است چندین مرحله آزمایش موازی قبل از استقرار تولید وجود داشته باشد. تفاوت بین تحویل مداوم و استقرار مداوم وجود تأییدیه دستی برای به روز رسانی به تولید است. با استقرار مداوم، تولید به طور خودکار و بدون تأیید صریح اتفاق می افتد.تحویل مداوم کل فرآیند انتشار نرم افزار را خودکار می کند. هر تجدیدنظری که انجام می شود یک جریان خودکار را راه اندازی می کند که به روز رسانی را ایجاد، آزمایش و سپس مرحله بندی می کند. تصمیم نهایی برای استقرار در یک محیط تولید زنده توسط توسعه دهنده انجام می شود.تحویل مستمر چگونه با CI/CD مرتبط است؟تحویل مداوم بخشی از CI/CD را تشکیل می دهد، روشی برای ارائه مکرر نرم افزار با خودکارسازی برخی از مراحل توسعه برنامه است. مزایای تحویل مداومفرآیند انتشار نرم افزار را خودکار می‌کندانتشار قابل اعتماد خطرات مرتبط با انتشار به طور قابل توجهی کاهش یافته است و روند انتشار قابل اعتمادتر شده است. با CD، فرآیند استقرار و اسکریپت ها قبل از استقرار تا تولید به طور مکرر آزمایش می شوند. بنابراین، بیشتر خطاها در فرآیند استقرار و اسکریپت ها قبلاً کشف شده اند. با انتشار بیشتر، تعداد تغییرات کد در هر نسخه کاهش می یابد. این امر یافتن و رفع هر گونه مشکلی را که رخ می دهد آسان تر می کند و زمان تأثیر آنها را کاهش می دهد.زمان تسریع به بازار CD به سازمان اجازه می دهد ارزش تجاری ذاتی در نسخه های نرم افزار جدید را سریعتر به مشتریان ارائه دهد. این قابلیت به شرکت کمک می کند تا یک قدم جلوتر از رقبا باقی بماند.کیفیت بالاتر وقتی توسعه‌دهندگان ابزارهای خودکاری دارند که در عرض چند دقیقه رگرسیون‌ها را کشف می‌کنند، تیم‌ها آزاد می‌شوند تا تلاش خود را بر روی تحقیقات کاربر و فعالیت‌های تست سطح بالاتر مانند تست اکتشافی، تست قابلیت استفاده مجدد، تست عملکرد و امنیت متمرکز کنند. با ایجاد یک خط لوله استقرار، این فعالیت ها می توانند به طور مداوم در طول فرآیند تحویل انجام شوند و اطمینان حاصل شود که از ابتدا کیفیت در محصولات و خدمات تعبیه شده است.هزینه های پایین تر هر محصول یا خدمات نرم افزاری موفقی در طول عمر خود به طور قابل توجهی تکامل می یابد. با سرمایه‌گذاری در ساخت، آزمایش، استقرار و اتوماسیون محیطی، ما با حذف بسیاری از هزینه‌های ثابت مرتبط با فرآیند انتشار، هزینه ایجاد و ارائه تغییرات تدریجی در نرم‌افزار را به‌طور قابل ملاحظه‌ای کاهش می‌دهیم.ساخت محصول مناسب انتشارات مکرر به تیم های توسعه برنامه اجازه می دهد بازخورد کاربر را سریعتر دریافت کنند. این به آنها امکان می دهد فقط روی ویژگی های مفید کار کنند. اگر متوجه شوند که یک ویژگی مفید نیست، تلاش بیشتری برای آن نمی کنند. این به آنها کمک می کند محصول مناسبی بسازند.بهبود بهره وری توسعه دهندگان علاوه بر این، هنگامی که ما به دفعات بیشتری منتشر می کنیم، تیم های تحویل نرم افزار می توانند فعالانه تر با کاربران درگیر شوند، یاد بگیرند که کدام ایده ها کار می کنند و کدام نه، و نتایج کاری را که انجام داده اند، از نزدیک ببینند. با حذف فعالیت‌های دردناک کم‌ارزش مرتبط با تحویل نرم‌افزار، می‌توانیم روی چیزی که بیشتر به آن اهمیت می‌دهیم تمرکز کنیم که به طور مداوم کاربران خود را خوشحال می‌کند.پیدا کردن و رفع اشکالات سریعترتیم شما می‌تواند با آزمایش‌های مکرر و جامع‌تر، باگ‌ها را زودتر قبل از اینکه بعداً به مشکلات بزرگ‌تری تبدیل شوند، کشف و برطرف کند. تحویل مداوم به شما امکان می‌دهد تا انواع تست‌های اضافی را بر روی کد خود آسان‌تر انجام دهید زیرا کل فرآیند خودکار شده است.به روز رسانی ها را سریعتر تحویل دهیدتحویل مستمر به تیم شما کمک می‌کند تا به‌روزرسانی‌ها را سریع‌تر و بیشتر به مشتریان ارائه دهد.بهبود رضایت مشتری سطح بالاتری از رضایت مشتری به دست می آید.چالش های موجود در تحویل مستمرتست مداومایجاد تعادل بین کیفیت و تحویل آسان نیست. بسیاری از ویژگی‌های جدید یا تغییرات کد می‌توانند بدون آزمایش باقی بمانند، زمانی که تیم زمان یا منابع کمی دارد. تحویل مداوم بستگی به قابلیت های آزمایش و تأیید دارد. تست‌های خودکار می‌توانند در اندازه‌گیری و درک عملکرد مفید باشند، به‌ویژه زمانی که در محیط‌های تولیدی اجرا می‌شوند.اسکریپت هافایل های اسکریپت مجموعه ای از دستورات هستند. در حالی که اسکریپت ها برای خودکارسازی سریع مفید هستند، اغلب برای خطوط لوله تحویل مستمر مقیاس یا ساده نمی شوند. اسکریپت خط لوله شما می تواند منجر به مشکلات پیکربندی، دانش قبیله ای که نمی تواند برای تیم های دیگر به اشتراک گذاشته شود، و خطوط لوله شکننده که در برابر تغییر مقاوم هستند منجر شود.امنیتپیاده‌سازی خط لوله CI/CD که سطح امنیت را تضمین می‌کند، زمانی که راه‌حل CD از راه‌حل‌های مدیریت کلیدی خارج از جعبه پشتیبانی نمی‌کند، می‌تواند چالش‌برانگیز باشد. حاکمیت و انطباق یک گام به سوی تضمین امنیت خدمات در خط لوله CI/CD است.ترجیحات مشتری برخی از مشتریان به روز رسانی مداوم سیستم های خود را نمی خواهند.محدودیت‌های دامنه در برخی حوزه‌ها، مانند مخابرات و پزشکی، مقررات نیاز به آزمایش گسترده قبل از ورود نسخه‌های جدید به فاز عملیاتی دارند.تفاوت در محیط هامحیط های مختلف مورد استفاده در توسعه، آزمایش و تولید می تواند منجر به لغزش مسائل ناشناخته به محیط تولید شود.آزمایش‌هایی که به اوراکل انسانی نیاز دارندهمه ویژگی‌های کیفیت را نمی‌توان با اتوماسیون تأیید کرد. این ویژگی‌ها به انسان‌ها در حلقه نیاز دارند و خط لوله تحویل را کاهش می‌دهند.ابزار‌ابزارهای مختلفی وجود دارد که به انجام تمام یا بخشی از این فرآیند کمک می کند. این ابزارها بخشی از خط لوله استقرار هستند که شامل تحویل مداوم است. در ادامه چندین مورد ابزار کاربردی و معروف در این حوزه را معرفی میکنیم.ابزار CircleCIابزار CircleCI که مورد اعتماد شرکت‌های معروفی مانند Stitch Fix و Spotify است، یک ابزار تحویل مداوم است که به‌طور یکپارچه با برنامه‌ها و سرویس‌های موجود، مانندAzure و Slack ادغام می‌شود. همچنین با فرآیند یکپارچه سازی مداوم شما یکپارچه می شود و به محض اینکه کد را به مخزن خود میبرید یک خط لوله ایجاد می کند. CircleCI به راحتی باGitHub و دیگر مخازن ادغام می شود. CircleCI بیشترین محبوبیت را در بین مشاغل کوچک و متوسط ​​دارد. برای این منظور، قابلیت های آن قابل تنظیم و مقیاس پذیر است تا متناسب با صنعت و اندازه شما باشد. به عنوان مثال، مشتریان این امکان را دارند که در فضای ابری CircleCI یا در زیرساخت خود میزبانی کنند. در هر صورت، کاربران CircleCI نیز می توانند از ایمن بودن کدشان مطمئن باشند. برای صرفه جویی در زمان، CircleCI دارای تنظیمات قابل استفاده مجدد و اشتراک گذاری به عنوان کد و داشبورد، CircleCI Insights است. از طریق این ابزار، کاربران می توانند بر بهینه سازی خط لوله و ساخت پروژه از نظر وضعیت، مدت زمان و نتایج آزمایش نظارت کنند. البته توجه داشته باشید که داشبورد Insights در زمان واقعی نیست. مشاهده تغییرات ممکن است تا 24 ساعت طول بکشد.ابزار CloudBeesابزار CloudBees CD یک ابزار تحویل مداوم است که مجموعه ای چشمگیر از داشبوردهای قابل تنظیم را ارائه می دهد، به طوری که می‌توانید داده ها را از زوایای مختلف مشاهده کنید. CloudBees CD که در بین مشاغل متوسط و شرکت های بزرگتر محبوب است، داده های بلادرنگ را در مورد وضعیت استقرار، فرکانس، توان عملیاتی و مدت زمان ارائه می دهد. اگر مشکلی پیش بیاید، قابلیت های نظارت آن از طریق داشبورد Workload Insights امکان بازگشت آسان را فراهم می کند.برای اهداف آزمایشی، CloudBeesCD به شما امکان می‌دهد در محیط‌های تولید مانند آزمایش کنید تا پیش‌نمایش تغییرات را دریافت کنید و نتایج آزمایش را در مرکز فرمان انتشار آن مشاهده کنید.ابزار Jenkinsابزار Jenkins که عمدتاً در شرکت‌های متوسط استفاده می‌شود، به‌عنوان یک سرور CI در دسترس است یا می‌تواند برای پشتیبانی و خودکارسازی فرآیند CD شما نیز گسترش یابد. در واقع، کاربران از نحوه خودکارسازی و ساده سازی فرآیند CI/CD لذت می برند. جنکینز با طیف گسترده ای از ابزارهای خارجی ادغام می شود، اما مراقب خزش و سازگاری ابزار باشید.ادغام Jenkins با بسیاری از ابزارهای خارجی می تواند منجر به مشکلات ارتقاء شود. علاوه بر این، مطمئن شوید که جنکینز از نسخه ابزارهای خارجی که استفاده می کنید پشتیبانی می کند. اشکال اصلی جنکینز این است که تجربه کاربری آن به اندازه برخی ابزارهای موجود در بازار خوشایند یا شهودی نیست.ابزار Harnessابزار Harness یک ماژول تحویل مداوم به عنوان یک سرویس (CDaaS) است که از یادگیری ماشین برای ساده کردن SDLC به روشی امن، قابل پیش‌بینی و پایدار استفاده می‌کند. این شامل لاگ ها و داشبوردهای کاربر پسند است که با تجسم خط لوله کامل شده است تا بر کل فرآیند CI/CD نظارت داشته باشد. کاربران می توانند زمان تحویل، تغییر نرخ شکست و موارد دیگر را ارزیابی کنند. Harness همچنین دارای یک ابزار نظارت است که امکان بازگشت آسان را در صورت لزوم فراهم می کند. کاربران هارنس که عمدتاً در مشاغل و شرکت‌های متوسط استفاده می‌شود، از این که به مهندسان کنترل بیشتری بر ساخت‌های خود می‌دهد، قدردانی می‌کنند.ابزار GitLabابزار 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-deliveryhttps://aws.amazon.com/devops/continuous-delivery/https://devops.com/the-state-of-continuous-delivery-in-2021/https://en.wikipedia.org/wiki/Continuous_deliveryhttps://www.synopsys.com/glossary/what-is-continuous-delivery.htmlhttps://harness.io/blog/what-is-continuous-delivery/https://www.cioinsight.com/it-strategy/top-continuous-delivery-tools-for-2021/#Top-Continuous-Delivery-Toolshttp://lara-host.ir/continuous-delivery/https://xaas.ir/https://www.arvancloud.com/fa