help-header

CI/CD چیست؟

CI/CD شکل مخفف عبارت Continuous Integration, Continuous Delivery/Development به معنی ادغام مستمر و تحویل/توسعه‌ی مستمر است. این مفهوم بیان‌گر روشی است که به‌وسیله‌ی آن، ارایه‌ی نرم‌افزار به کاربران به کمک خودکار کردن مراحل توسعه، تسریع می‌شود. CI/CD راه‌حلی برای مشکلاتی است که الحاق کدهای جدید به برنامه برای تیم توسعه‌دهندگان و DevOps ایجاد می‌کند. 

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

 

مفهوم CI/CD

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

قسمت CD که می‌تواند سرواژه‌ی هر دو عبارت Continuous Delivery و Continuous Development باشد. این دو مفهوم به‌هم‌پیوسته و به‌هم مرتبط هستند و اغلب به‌جای هم استفاده می‌شوند. این عبارت به خودکارسازی مراحل بعدی Pipeline برمی‌گردد. Continuous Delivery معمولن زمانی استفاده می‌شود که تغییرات اعمال شده به‌وسیله‌ی توسعه‌دهنده به‌شکل خودکار از نظر داشتن باگ بررسی شده و سپس در یک مخزن برای پیاده‌سازی در محصول توسط تیم عملیات بارگذاری می‌شود. این مفهوم در واقع پاسخی برای رفع  مشکل ارتباط ضعیف بین تیم توسعه‌دهنده و کسب‌وکار است و باعث می‌شود زحمت پیاده‌سازی تغییرات جدید به حداقل برسد.

Continuous Deployment مربوط به انتشار خودکار تغییراتی است که توسعه‌دهنده ایجاد کرده و در مخزن اعمال شده است تا کاربر آن را مشاهده کند. این مفهوم راهی برای حل مشکل ایجاد سربار زیاد برای تیم عملیات، به‌دلیل تنظیمات دستی مربوط به انتشار است که سرعت تحویل نرم‌افزار را کاهش می‌دهد. 

 

CI/CD چگونه کار می‌کند؟

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

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

مرحله‌ی پایانی یک CI/CD Pipeline قدرت‌مند، Continuous Deployment است. این بخش به‌عنوان تکمیل‌کننده‌ی Continuous Delivery، انتشار پایانی برنامه به‌عنوان محصول را خودکار می‌کند. در عمل، Continuous Deployment به این معنا است که تغییراتی که توسعه‌دهنده در یک برنامه مبتنی‌بر فضای ابری لحاظ می‌کند، با فاصله‌ای کوتاه از زمان نوشتن آن به دست کاربر برسد. به این شکل بهتر می‌توان بازخورد کاربر نسبت به تغییرات پیاده شده را دریافت کرد و مورد نظر قرار داد.

 

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