تحویل مداوم (continuous delivery)

تحویل مداوم اصطلاحی است که در سال 2010 و پس از گفتگوهایی در مورد Continuous Integration به وجود آمد. در سال 2006، مارتین فاولر از روش ادغام مداوم کد توسعه‌دهنده در پایگاه‌های کد به روشی خودکار، کارآمد و آزمایش‌شده برای کاهش خطاها و تسریع توسعه نرم‌افزار حمایت کرد.کتابی با عنوان Continuous Delivery توسط Jez Humble و David Farley تکنیک‌ها را به کل چرخه عمر توسعه نرم‌افزار گسترش داد، به‌ویژه در مورد قرار دادن کد در محیط‌های تولید (production) بحث کرد. در این کتاب، Jez Humble و David Farley، تحویل مداوم را این گونه تعریف می‌کنند: «عملی برای اطمینان از اینکه نرم‌افزار همیشه آماده استقرار است». به عبارت دیگر، CD فرآیند خودکار گذراندن یک محصول (Artifact) از مراحل مختلف برای در دسترس قرار گرفتن تغییرات نرم افزار در اختیار مصرف کننده است. این تغییرات در یک محیط تولید آماده، برای انتشار در آینده قرار می گیرند.هدف از تحویل مداوم، تحویل یک artifact بسته بندی شده به محیط تولید است. CD، کل فرآیند تحویل، از جمله فرآیند استقرار را خودکار می کند. مسئولیت‌های CD می‌تواند شامل تهیه زیرساخت، مدیریت تغییرات، استقرار artifact ها، تأیید و نظارت بر آن تغییرات، و اطمینان از عدم وقوع این تغییرات در صورت وجود هرگونه مشکل باشد.تحویل مداوم در مقابل ادغام مداومیکپارچه سازی مداوم (CI) یک فرآیند خودکار برای یکپارچه سازی مداوم تغییرات توسعه نرم افزار است. فرآیندهای CI، ساخت (build)، آزمایش و اعتبارسنجی کد منبع را خودکار می کنند. با کار کردن با قابلیت‌های CI، تیم‌های توسعه‌دهنده، چرخه‌های انتشار کد خود را تسریع می‌کنند و این امر باعث می‌شود که با چرخه‌های طولانی توسعه ویژگی‌ها و چالش‌های ناشی از آن، مانند تداخل ادغام (merge conflicts) و کد شکسته (broken code)، کمتر مواجه شوند.بنابراین CI در مورد ادغام ویژگی های جدید و تغییرات کد در یک آرتیفکت است. در یک گردش کار توسعه معمولی، یک توسعه دهنده:کد نویسی می کند.کد را با استفاده از سیستم کنترل نسخه / ابزار مدیریت پیکربندی بررسی می کند.این پایگاه کد جدید، یک فرآیند ساخت را طی می کند.این سازه در یک artifact بسته بندی می شود.و سپس artifact در یک مخزن ذخیره می شود.هدف CI تولید یک artifact بسته بندی شده است که آماده استقرار بر روی سرور یا ماشین است. نمونه ای از یک مصنوع می تواند یک تصویر کانتینر (container image)، فایل WAR/JAR یا هر کد بسته بندی شده اجرایی دیگری باشد. بنابراین، فعالیت های CI یک الزام برای CD است.اCI/CD یک اصطلاح کوتاه شده برای یکپارچه سازی مداوم و تحویل مداوم است. CI/CD یک روش DevOps شامل ترکیبی از اصول، روش‌ها و قابلیت‌هایی است که اجازه می‌دهد تا تغییرات نرم‌افزاری از هر نوع، به صورت سریع، مکرر و ایمن به دست کاربران برسد. این روش به توسعه دهندگان نرم افزار اجازه می دهد تا تغییرات ویژگی یا خدمات خود را به طور مداوم ادغام کنند و تیم های فناوری اطلاعات و عملیات بتوانند استانداردها، امنیت و اطمینان کسب و کارها را در فرآیند انتشار خود ارائه دهند.مولفه های تحویل مداومفرآیند تحویل مداوم یک artifact، به زیرساخت، مدیریت تغییرات، استقرار، تصدیق (Verification) و استراتژی های بازگشت (Rollback)/ شکست نیاز دارد.به طور کلی برای یک artifact که آماده استقرار است، شش مولفه برای یک خط لوله تحویل مداوم وجود دارد:دسترسی به محیط های ابری، on-premises یا ترکیبیتامین زیرساختمدیریت تغییر و تاییدیه هابه کارگیری یک استراتژی برای استقراربررسی کاراییتعریف یک استراتژی شکست یا بازگشتیک خط لوله CD، این فعالیت ها را خودکار می کند.مزایای تحویل مداومانتشار های کم خطر: هدف اصلی از تحویل مداوم، این است که استقرار نرم افزار، بدون دردسر و در قالب رویداد های کم خطری که بتوان در هر زمان و بنا به درخواست، انجام شود، صورت بگیرد. با استفاده از الگو هایی مانند استقرار آبی-سبز، دستیابی به استقرار های بدون توقف (zero-downtime deployments) که برای کاربران غیر قابل تشخیص هستند، نسبتا ساده است.رسیدن سریعتر به بازار: این که در رویکرد سنتی چرخه حیات تحویل نرم افزار، فاز ادغام و تست، هفته ها یا حتی ماه ها طول بکشد، مسئله ای دور از ذهن نیست. زمانی که تیم ها برای خودکار سازی ساخت و توسعه، فراهم سازی محیط و فرآیند های تست رگرسیون با هم کار می کنند، توسعه دهندگان می توانند ادغام و تست رگرسیون را در کار روزانه خود گنجانده و یا این مراحل را به طور کامل حذف کنند. ما همچنین از حجم زیاد دوباره کاری که رویکرد مرحله‌ای را کند می کند اجتناب می‌کنیم.کیفیت بالاتر: وقتی توسعه‌دهندگان، ابزارهای خودکاری دارند که در عرض چند دقیقه رگرسیون‌ها را کشف می‌کنند، تیم‌ها آزاد می‌شوند تا تلاش خود را بر روی تحقیقات کاربر و فعالیت‌های تست سطح بالاتر مانند تست اکتشافی، تست قابلیت استفاده مجدد، تست عملکرد و امنیت متمرکز کنند. با ایجاد یک خط لوله استقرار، این فعالیت ها می توانند به طور مداوم در طول فرآیند تحویل انجام شوند و اطمینان حاصل شود که از ابتدا کیفیت در محصولات و خدمات تعبیه شده است.هزینه های پایین تر: هر محصول یا خدمات نرم افزاری موفقی در طول عمر خود به طور قابل توجهی تکامل می یابد. با سرمایه‌گذاری در ساخت، آزمایش، استقرار و اتوماسیون محیطی، ما با حذف بسیاری از هزینه‌های ثابت مرتبط با فرآیند انتشار، هزینه ایجاد و ارائه تغییرات تدریجی در نرم‌افزار را به‌طور قابل ملاحظه‌ای کاهش می‌دهیم.ساخت محصول مناسب: انتشارات مکرر، به تیم های توسعه اجازه می دهد تا بازخورد کاربر را سریعتر دریافت کنند و فقط روی ویژگی های مفید کار کنند. اگر متوجه شوند که یک ویژگی مفید نیست، تلاش بیشتری برای آن نمی کنند. این به آنها کمک می کند محصول مناسبی بسازند.تیم های شادتر: تحقیقات، حاکی از این است که که تحویل مداوم باعث کاهش فرسودگی تیم می شود. علاوه بر این، هنگامی که ما به دفعات بیشتری انتشار را انجام می دهیم، تیم های تحویل نرم افزار می توانند فعالانه تر با کاربران درگیر شوند، یاد بگیرند که کدام ایده ها کار می کنند و کدام نه و نتایج کاری را که انجام داده اند از نزدیک ببینند. با حذف فعالیت‌های دردناک کم‌ارزش مرتبط با تحویل نرم‌افزار، می‌توانیم روی چیزی که بیشتر به آن اهمیت می‌دهیم تمرکز کنیم و به طور مداوم کاربران خود را خوشحال نگه داریم.غلبه بر چالش ها در تحویل مداومهمانطور که پیش تر اشاره شد، تعدادی چالش در تحویل مداوم از جمله در تست، مدیریت اسکریپت ها و تضمین امنیت وجود دارد.تست مداومایجاد تعادل بین کیفیت و تحویل، آسان نیست. بسیاری از ویژگی‌های جدید یا تغییرات کد، می‌توانند در صورت کمبود زمان یا منابع، بدون آزمایش باقی بمانند. تحویل مداوم بستگی به قابلیت های آزمایش و تأیید دارد. تست‌های خودکار می‌توانند در اندازه‌گیری و درک کارایی مفید باشند؛ به‌ویژه زمانی که در محیط‌های تولید اجرا می‌شوند.اسکریپت هافایل های اسکریپت مجموعه ای از دستورات هستند. در حالی که اسکریپت ها برای خودکارسازی سریع مفید هستند، اغلب برای خطوط لوله تحویل مداوم، مقیاس پذیر و یا ساده نیستند. اسکریپت خط لوله شما می تواند منجر به مشکلات پیکربندی، دانشی که نمی تواند برای تیم های دیگر به اشتراک گذاشته شود، و خطوط لوله شکننده که در برابر تغییر مقاوم هستند منجر شود.امنیتامنیت وظیفه همه است ایجاد پیاده‌سازی خط لوله CI/CD که سطح امنیت را تضمین می‌کند، زمانی که راه‌حل CD از راه‌حل‌های مدیریت کلیدی خارج از جعبه پشتیبانی نمی‌کند، می‌تواند چالش‌برانگیز باشد. حاکمیت و انطباق، یک گام به سوی تضمین امنیت خدمات در خط لوله CI/CD است.ابزار های CDابزار Argo CDArgo CD یک ابزار تحویل مداوم برای Kubernetes است.این ابزار از الگوی GitOps برای استفاده از مخازن Git به عنوان منبعی برای تعریف وضعیت برنامه مورد نظر استفاده می کند و استقرار وضعیت های برنامه را در محیط های هدف مشخص شده، خودکار می کند.Argo CD به‌عنوان یک کنترل‌کننده kubernetes پیاده‌سازی می‌شود و به طور مداوم برنامه‌های در حال اجرا را نظارت می‌کند و وضعیت فعلی و زنده را با حالت هدف مورد نظر (همانطور که در مخزن Git مشخص شده است) مقایسه می‌کند و یک برنامه مستقر شده که حالت زنده آن از حالت هدف منحرف می شود OutOfSync در نظر گرفته می گیرد. Argo CD تفاوت ها را گزارش کرده و نمایش می دهد؛ همچنین امکاناتی را برای همگام سازی (Sync) خودکار یا دستی حالت زنده به حالت هدف، فراهم می کند. هر گونه تغییری که در وضعیت هدف مورد نظر در مخزن Git ایجاد شود، می تواند به طور خودکار اعمال شود و در محیط های هدف مشخص شده منعکس شود.ابزار JenkinsJenkins یک ابزار اتوماسیون متن باز است که به خودکار سازی بخش های مرتبط با ساخت (build)، تست و استقرار در توسعه نرم افزار و تسهیل فرآیند CI/CD کمک می کند. از جنکینز می توان به عنوان محبوب ترین و پراستفاده ترین ابزار CI نام برد. از این ابزار به این صورت می توان استفاده کرد که پس از هر تغییر در کد، فرآیند های ساخت، تست و استقراری را که در تنظیمات آن در نظرگرفته ایم را به صورت خودکار انجام دهد.شرکت های ایرانی ارائه دهنده خدمات CDشرکت داده کاوان تصمیم یارشرکت داده کاوان تصمیم یار (کوالاتک) به شماره ثبت: 576694 و شناسه ملی: 14009978163 در زمینه ارائه ، مشاوره و آموزش خدمات نرم افزاری به سازمان‌های دولتی و خصوصی فعالیت می‌نماید. شرکت داده کاوان تصمیم یار خدمات مختلف نرم افزاری ارائه می‌دهد که یکی از آنها “تست اتوماتیک نرم افزار و تضمین کیفیت” می‌باشد.این شرکت، با بهره‌گیری از متخصصان ارشد حوزه QA و انجام ده‌ها پروژه مختلف آماده کمک به سازمان‌های مختلف برای راه اندازی فرایند CI/CD می‌باشد.کوالاتک با راه اندازی فرایند CD برای نرم افزار و اپلیکیشن شما، مانع بروز مشکلات بارگذاری های دستی توسط تیم فنی می‌شود.با اتوماتیک کردن بارگذاری نسخه‌های جدید نرم افزار، منافع متعددی نظیر تسریع در تحویل، صرفه جویی زمانی ، صرفه جویی مالی، کاهش چالش های نیروهای فنی و … بدست می آید که برای هر سازمانی بسیار مهم می باشد.برای دریافت اطلاعات بیشتر، به لینک زیر مراجعه نمایید:https://qualatech.ir/ci-cdابر آروانابر آروان شرکتی های‌تک در حوزه‌ی فناوری ابری است که کار خود را از سال ۱۳۹۴ آغاز کرده است و با ده‌ها محصول و قابلیت ابری مختلف مانند شبکه توزیع محتوا (CDN)، سرور ابری، پلتفرم ویدیویی، کانتینر ابری و آبجکت استوریج، زیرساخت کسب‌وکارهای آنلاین، سازمان‌ها و استارت‌آپ‌ها را تامین می‌کند.ابر آروان با در اختیار داشتن ۴۰ پاپ‌سایت در سراسر ایران و جهان، پاسخ‌گوی نیازهای زیرساختی بیش از ۶۰ هزار مشتری داخلی و خارجی است و تلاش می‌کند با قیمت‌گذاری اقتصادی و ارایه‌ی بسته‌های رایگان در هر محصول، از کسب‌وکارهای نوپا و در حال رشد نیز حمایت کند.سرویس‌دهی به بسیاری از پربازدیدترین وب‌سایت‌های ایرانی، پخش زنده‌ی مهم‌ترین رویدادهای ملی، ارایه‌ی خدمات امنیتی به سامانه‌های حساس دولتی و هم‌چنین جلوگیری از حملات سایبری به بسیاری از بانک‌ها و سامانه‌های کشور از جمله خدماتی است که این شرکت در اختیار کاربران قرار می‌دهد.در ابر آروان، امکان راه‌اندازی پایپ لاین ‏CI/CD‏ بر روی سرویس پلتفرم ابری آروان (در سطح PAAS) وجود دارد.برای دریافت اطلاعات بیشتر، به لینک زیر مراجعه نمایید:https://www.arvancloud.com/docs/%D9%BE%D8%A7%DB%8C%D9%BE%D9%84%D8%A7%DB%8C%D9%86-cicd-%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-paas-%D8%A7%D8%A8%D8%B1%D8%A2%D8%B1%D9%88%D8%A7%D9%86/«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://harness.io/blog/what-is-continuous-deliveryhttps://continuousdelivery.comhttps://argo-cd.readthedocs.io/en/stablehttps://www.jenkins.iohttps://qualatech.ir/ci-cdhttps://www.arvancloud.com/docs/%D9%BE%D8%A7%DB%8C%D9%BE%D9%84%D8%A7%DB%8C%D9%86-cicd-%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-paas-%D8%A7%D8%A8%D8%B1%D8%A2%D8%B1%D9%88%D8%A7%D9%86/