مقدمه

CI مخفف Continuous integration به معنای ادغام مداوم و CD مخفف Continuous delivery به معنای تحویل مداوم است. CI/CD یکی از بهترین شیوه‌ هایی است که تیم‌ های توسعه نرم‌افزار برای ارائه تغییرات کد به صورت مکرر و قابل اعتماد به کار می‌ گیرند. با ما همراه باشید تا به این سوال که CI/CD چیست پاسخ دهیم.
ادغام مداوم (CI) و تحویل مداوم (CD) مجموعه‌ ای از اصول عملیاتی است که تیم‌های توسعه‌ نرم‌افزار را قادر می‌ سازد تغییرات کد را در بازه ‌های زمانی کوتاه‌تر ارائه دهند. CI/CD یکی از بهترین شیوه ‌ها برای پیاده‌ سازی نرم ‌افزار توسط تیم ‌های توسعه است. این روش بهترین روش متدولوژی چابک است. زیرا تیم توسعه نرم‌ افزار را قادر می‌ سازد تا بر روی نیازهای تجاری، کیفیت کد و امنیت تمرکز کند. چون در CI/CD مراحل استقرار به صورت خودکار انجام می ‌شود.

CI/CD چیست؟

برای پاسخ به CI/CD چیست باید بتوان هر یک را به طور جداگانه تعریف کرد. ادغام مداوم (CI) یک فلسفه کدگذاری و مجموعه‌ ای از شیوه‌ ها است که تیم‌ های توسعه را مجبور می‌ کند تغییرات کوچک را پیاده‌سازی کرده و کد را به طور مکرر به مخازن کنترل بفرستند. از آنجا که اکثر برنامه ‌های کاربردی مدرن نیاز به توسعه کد در بسترها و ابزارهای مختلف دارند، تیم توسعه به مکانیزمی ‌برای ادغام و اعتبارسنجی تغییرات خود نیاز دارد.
هدف فنی CI ایجاد روشی سازگار و خودکار برای ساخت، بسته‌بندی و آزمایش برنامه‌ ها است. با سازگاری در فرایند ادغام، تیم‌ ها به احتمال زیاد تغییرات کد را بیشتر انجام می ‌دهند. این مورد منجر به همکاری بهتر بین اعضای تیم و بالا رفتن کیفیت نرم‌افزار می‌ شود.

تحویل مداوم (CD) تحویل برنامه‌ ها به محیط‌ های زیر ساختی انتخاب شده را به صورت خودکار انجام می‌ دهد. اکثر تیم‌ ها با محیط ‌های مختلف غیر از تولید، مانند محیط ‌های توسعه و آزمایش نیز کار می ‌کنند. CD تضمین می‌ کند که راهی اتوماتیک برای اعمال تغییرات در کد وجود دارد.
ابزارهای CI/CD به تنظیم پارامترهای خاص محیطی که باید در هر بار تحویل ذخیره شوند، کمک می‌ کند. سپس اتوماسیون CI/CD هرگونه تماس سرویس مورد نیاز با سرورهای وب، پایگاه‌ های داده و سایر سرویس‌ هایی که ممکن است نیاز به راه اندازی مجدد داشته باشند یا در هنگام استقرار برنامه ‌ها از سایر مراحل پیروی کند را انجام می‌ دهد.

ادغام مداوم و تحویل مداوم نیاز به آزمایش مداوم دارد. زیرا هدف ارائه برنامه‌ ها و کد باکیفیت به کاربران است. آزمایش مداوم غالباً به عنوان مجموعه ‌ای از رگرسیون خودکار، عملکرد و سایر آزمایشاتی که در روش CI/CD اجرا می ‌شوند، صورت می ‌گیرد.
آزمایش CI/CD دارای امکان پیاده ‌سازی مداوم است که در آن تغییرات برنامه از طریق روش CI/CD اجرا می ‌شود و ساختارهای منتقل شده مستقیماً در محیط ‌های تولید مستقر می ‌شوند. تیم ‌هایی که تحویل مداوم را آزمایش می ‌کنند، تصمیم می ‌گیرند در یک برنامه روزانه یا حتی ساعتی به تولید بپردازند، اگرچه تحویل مداوم همیشه برای هر برنامه تجاری مناسب نیست.

چگونه ادغام مداوم (CI) باعث افزایش همکاری و بالا رفتن کیفیت نرم‌افزار می‌ شود؟

بعد از پاسخ به سوال CI/CD چیست باید بتوان کارایی هر دو مورد را درک کرد. ادغام مداوم (CI) یک فلسفه توسعه است که توسط مکانیک فرآیند و برخی از اجزای اتوماسیون پشتیبانی می‌ شود. هنگام آزمایش CI، توسعه‌ دهندگان کد خود را اغلب به مخزن کنترل نسخه متصل می ‌کنند و اکثر تیم ‌ها حداقل استانداردی برای انجام کد در طول روز دارند. دلیل این امر این است که تشخیص نقص‌ ها و سایر مسائل مربوط به کیفیت نرم‌افزار در کدهای کوچکتر راحت ‌تر از تشخیص آن در کدهای بزرگتر است که در مدت زمان طولانی ‌تری ایجاد شده است. علاوه بر این، وقتی توسعه ‌دهندگان روی چرخه ‌های کوتاه ‌تر تعهد می‌ کنند، به احتمال زیاد چندین توسعه ‌دهنده یک کد را ویرایش کرده و هنگام انجام تعهد نیاز به ادغام دارند.
تیم ‌هایی که ادغام مداوم را پیاده‌ سازی می‌ کنند اغلب با پیکربندی کنترل نسخه شروع می‌ کنند. حتی اگر بررسی کد به طور مکرر انجام شود، ویژگی‌ ها و اصلاحات در هر دو بازه زمانی کوتاه و طولانی اجرا می‌ شود. تیم‌ های توسعه ‌ای که ادغام مداوم را آزمایش می‌ کنند، از تکنیک‌ های مختلف برای کنترل ویژگی ‌ها و کد آماده برای تولید استفاده خواهند کرد.
سپس فرآیند ساخت با بسته ‌بندی تمام نرم‌افزارها، پایگاه داده و سایر اجزاء خودکار می‌ شود. به عنوان مثال، اگر در حال توسعه یک برنامه جاوا هستید، CI تمام فایل ‌های سرور وب ثابت مانند HTML، CSS و JavaScript را به همراه برنامه جاوا و هرگونه اسکریپت پایگاه داده در یک پکیج یا بسته قرار می‌ دهد.
CI نه تنها تمام اجزای نرم ‌افزار و پایگاه داده را بسته‌ بندی می‌ کند، بلکه اتوماسیون آزمایشات واحد و سایر آزمایشات را نیز انجام می‌ دهد. این آزمایش به توسعه ‌دهندگان اطمینان می ‌دهد که تغییرات کد آنها در هیچ تست واحد موجودی شکست نمی ‌خورد.
اکثر ابزارهای CI/CD به توسعه‌ دهندگان اجازه می ‌دهند تا بر اساس تقاضا، با استفاده از کد‌های موجود در مخزن کنترل نسخه یا در یک برنامه مشخص، شروع به کار کنند. تیم‌ ها باید درباره برنامه ‌ای که با توجه به اندازه تیم بهتر کار می ‌کند، تعداد تعهدات روزانه مورد انتظار و سایر ملاحظات برنامه بحث کنند. بهترین روش برای اطمینان از سرعت انجام و ساخت سریع، در غیر این صورت، ممکن است مانع پیشرفت تیم‌ هایی شود که سعی می ‌کنند سریع کدگذاری کنند.

چگونه تحویل مداوم (CD) تغییرات موجود در چند محیط را خودکار می ‌کند؟

تحویل مداوم (CD) برنامه‌ها را به محیط ‌های تحویل سوق می ‌دهد. اکثر تیم ‌های توسعه به طور معمول دارای یک یا چند محیط توسعه و آزمایش هستند که در آن تغییرات برنامه برای آزمایش و بررسی انجام می ‌شود. یک ابزار CI/CD چیست؟ این ابزار مانند Jenkins، CircleCI، AWS CodeBuild، Azure DevOps، Atlassian Bamboo یا Travis CI برای خودکارسازی مراحل و ارائه گزارش استفاده می‌ شود. یک رویکرد معمولی CD مراحل ساخت، آزمایش و استقرار دارد. خطوط لوله پیچیده‌ تر شامل بسیاری از مراحل زیر است:

  •  برداشتن کد از بخش کنترل نسخه و ساخت
  • اجرای هرگونه مراحل زیرساخت مورد نیاز که بصورت خودکار به عنوان کد برای ایجاد یا از بین بردن زیرساخت ابری انجام می ‌شود.
  •  انتقال کد به محیط محاسباتی هدف
  •  مدیریت متغیرهای محیط و پیکربندی آنها برای محیط هدف
  •  فرستادن اجزای برنامه به سمت ارائه ‌دهنده خدمات مناسب آنها، مانند سرورهای وب، خدمات API و خدمات پایگاه داده
  •  انجام هرگونه مراحل مورد نیاز برای راه ‌اندازی مجدد خدمات یا تماس با نقاط پایانی سرویس که برای فشارهای جدید کد مورد نیاز است.
  •  در صورت شکست تست ‌ها، انجام آزمایش‌ های مداوم و محیط‌ های برگشتی.
  •  ارائه داده‌ های گزارش و هشدارها در مورد وضعیت تحویل

به عنوان مثال، کاربران جنکینز خطوط لوله خود را در فایل Jenkinsfile تعریف می ‌کنند که مراحل مختلف مانند ساخت، آزمایش و استقرار را شرح می ‌دهد. متغیرهای محیطی، گزینه ‌ها، کلیدهای مخفی، گواهینامه ‌ها و سایر پارامترها در فایل اعلام شده و سپس به صورت مرحله‌ ای به آنها ارجاع داده می ‌شود. بخش پست شرایط خطا و اعلان ‌ها را مدیریت می ‌کند.

CD پیچیده‌ تر ممکن است مراحل دیگری مانند انجام همگام‌ سازی داده‌ ها، بایگانی منابع اطلاعاتی، یا وصله برنامه ‌ها و کتابخانه را داشته باشد. ابزارهای CI/CD معمولاً از افزونه‌ ها پشتیبانی می‌ کنند. به عنوان مثال، جنکینز بیش از 1500 پلاگین را که از ادغام با سیستم‌ عامل‌ های شخص ثالث، رابط کاربری، مدیریت، مدیریت کد منبع و مدیریت ساخت پشتیبانی می‌کند به کار می ‌گیرد.

پیاده ‌سازی روش CI/CD با معماری Kubernetes و بدون سرور

بسیاری از تیم‌ هایی که از روش CI/CD در محیط‌ های ابری استفاده می ‌کنند نیز از ظروفی مانند Docker و سیستم‌ های ارکستراسیون مانند Kubernetes بهره می ‌برند. این به اصطلاح ظروف، بسته‌ بندی و حمل و نقل را به روش ‌های استاندارد و قابل حمل امکان‌پذیر می ‌سازند. از طرفی مقیاس ‌بندی یا تخریب محیط ‌هایی را که بار کاری متغیری دارند، آسان می ‌کند.
روش ‌های زیادی برای استفاده از ظروف، زیر ساخت به عنوان کد و خطوط لوله CI/CD با هم وجود دارد. معماری‌ های محاسباتی بدون سرور راهی برای استقرار و مقیاس‌ بندی برنامه ‌ها ارائه می‌ دهند. در محیط بدون سرور، زیر ساخت به طور کامل توسط ارائه ‌دهنده خدمات ابری مدیریت می ‌شود و برنامه بر اساس پیکربندی خود، منابع مورد نیاز را مصرف می‌ کند. به عنوان مثال، در AWS، برنامه‌ های بدون سرور به عنوان توابع Lambda اجرا می‌ شوند و استقرارها می ‌توانند در یک روش Jenkins CI/CD با یک افزونه ادغام شوند.

CI/CD چگونه استقرار مکرر کد را فعال می ‌کند؟

یک بار دیگر پاسخ سوال CI/CD چیست را مرور می کنیم. بسته‌ های CI نرم‌افزارها را آزمایش می‌ کند و اگر تغییرات آنها در هر آزمایش واحدی شکست بخورد به توسعه‌ دهندگان هشدار می ‌دهد. CD اتوماسیونی است که تغییرات را در زیر ساخت ایجاد می‌ کند و آزمایش‌ های اضافی را انجام می‌ دهد.

خطوط لوله CI/CD برای مشاغلی طراحی شده است که می ‌خواهند برنامه ‌های کاربردی را به طور مکرر بهبود بخشند و نیاز به یک فرایند تحویل قابل اعتماد دارند. تلاش اضافی برای استاندارد سازی بیلد‌ها، توسعه آزمایش‌ ها و خودکارسازی استقرارها، فرایند تولید برای استقرار تغییرات کد است. به محض ایجاد، تیم‌ ها را قادر می ‌سازد تا بیشتر بر فرایند افزایش برنامه‌ ها و کمتر بر روی جزئیات سیستم ارائه به محیط‌ های محاسباتی تمرکز کنند.

CI/CD یکی از بهترین روش ‌های توسعه است. زیرا به ناهماهنگی بین توسعه ‌دهندگانی می ‌پردازد که می ‌خواهند تغییرات را به طور مکرر اعمال کنند. با اتوماسیون، توسعه‌ دهندگان می ‌توانند تغییرات را بیشتر اعمال کنند. با CI/CD تیم‌ های عملیاتی از ثبات بیشتری برخوردارند زیرا محیط ‌ها دارای پیکربندی استاندارد هستند، آزمایش مداوم در فرایند تحویل وجود دارد، متغیرهای محیط از برنامه جدا شده و روش‌ های برگشت مجدد به صورت خودکار انجام می‌ شود.

تأثیر پیاده‌سازی خطوط لوله CI/CD را می ‌توان به عنوان یک شاخص عملکرد کلیدی (KPI) اندازه‌گیری کرد. KPI مانند فرکانس استقرار، زمان تغییر و زمان متوسط برای بازیابی (MTTR) از یک حادثه، اغلب هنگام اجرای CI/CD با آزمایش مداوم بهبود می ‌یابد. با این حال، CI/CD تنها یک فرایند است که می‌ تواند این پیشرفت ‌ها را به دنبال داشته باشد و پیش‌نیازهای دیگری نیز برای بهبود فرکانس‌ های استقرار وجود دارد.

شروع کار با CI/CD مستلزم همکاری تیم‌ های توسعه‌ ای و تیم‌ های عملیاتی در زمینه فناوری‌ ها، شیوه‌ ها و اولویت‌ ها است. تیم ‌ها باید در مورد رویکردهای مناسب برای کسب و کار و فناوری خود اجماع ایجاد کنند تا هنگامی‌که CI/CD در محل قرار گرفت تیم به طور مداوم کار کند.

جمع ‌بندی

CI/CD یک روش برای توسعه پروژه‌ های نرم‌افزاری است. این روش تحت عنوان ادغام مداوم/تحویل مدام شناخته می ‌شود. به کمک CI/CD تیم‌ های توسعه نرم‌افزار می توانند پروژه را به شکلی هر چه بهتر پیش ببرند و به هدف خود که تولید یک نرم ‌افزار کاربردی و کاربرپسند است برسند. ما در این مطلب به سوال CI/CD چیست پاسخ دادیم و توضیحات لازم در این زمینه را مطرح کردیم.