آشنایی با مفاهیم CI / CD

پایپ لاین CI/CD یکی از بهترین شیوه های پیاده سازی در تیم های devops به منظور دریافت تغییرات ایجاد شده در کد، بصورت مداوم و مطمئن است.CI/CDترکیبی از مخفف کلمات Continuous Integrationو Continuous Delivery است. روش‌های CI/CD در حال حاضر پذیرفته شده ترین گزینه برای کوتاه کردن زمان تولید و تولید نرم‌افزار است.در چشم انداز همیشگی امروز یکی از مهمترین چالش شرکت‌های نرم‌افزاری پاسخ سریع به تقاضاهای بازار و مشتری است. بدین ترتیب روش CI/CD به عنوان راه حل اصلی چنین چالشی در نظر گرفته می‌شود.پایپ لاین (Pipeline)در معنی لغوی و غیر اصطلاحانه، پایپ لاین به لوله های بلندی که معمولا در زیر زمین قرار داشته و برای جابجایی نفت و یا گاز استفاده شده و در متراژ طولانی تعبیه می شوند، گفته می شود. حال به دنیای مهندسی باز می گردیم. پایپ لاین را به توالی خطی ای از ماژول های مشخص می گویند که در جهتی مشخص در حال حرکت هستند.مثلا در دنیای CPU ها، پایپ لاین، به وسیله ای درون CPU گفته می شود که CPU را قادر می سازد دستورات را قبل از اجرا بخواند، و در صورت تایید و به محض تکمیل و بعد از تحویل آن، دستور بعدی را بخواند. DevOpsچیستDevOpsنوعی تغییر در نحوه کار شرکت برای روند استقرار خود است. در بسیاری از سازمان‌ها، کد توسط توسعه دهندگان و استقرار توسط تیم عملیاتی اداره می‌شود. مشکل اساسی که DevOps حل می‌کند، زمان کند چرخه برای رفع اشکالات و انتشار ویژگی‌های جدید است.وظیفه DevOpsوظایف DevOps ترکیبی از عملکردهای توسعه نرم افزار (Dev) و عملیات IT یا(Ops) است که هدف آن کوتاه کردن چرخه عمر سیستم ها و تحویل مداوم (CD) و باکیفیت نرم افزار است.چرخه توسعه نرم‌افزار دارای بسیاری از قطعات متحرک است. یک مشکلی که بسیاری از شرکت‌های بزرگ دارند، حفظ یک روند استقرار ثابت است. مراحل نوشتاری گاهی اوقات رد می‌شوند. استقرارهای دستی مستعد خطا هستند و اسکریپت‌ها نیز معمولاً توسط کسی که آن‌ها را نوشته است قابل درک است.مفهوم : CIیکپارچه‌سازی مداوم و یا ادغام مداوم (CI) در برنامه‌نویسی به مجموعه‌ای از روش‌ها می‌گویند که باعث حفظ انسجام کد می‌شود و از به‌هم‌ریختگی کد جلوگیری می‌کند. این روش‌ها مبتنی بر build کردن مداوم پروژه پس از هر تغییر در کد توسط برنامه‌نویسان و اجرای تست کیس‌های برنامه است. به عنوان مثال هر زمان که یک commit توسط توسعه‌دهنده بر روی مخزن پروژه push شود همهٔ تست‌ها اجرا می‌شود تا بتوان اطمینان حاصل نمود که همهٔ قسمت‌های پیشین کد و قسمت‌های تازه نوشته‌شده با یک‌دیگر سازگاری دارد و درست کار می‌کند.در یک روش CI توسعه دهندگان قبل از کامیت کد به ریپازیتوری کنترل نسخه، آن را بر روی workstationهای خود ایجاد، اجرا و تست می‌کنند. پس از ایجاد تغییرات در ریپازیتوری، زنجیره‌ای از رویدادها به حرکت در می‌آیند. اولین قدم معمول در این زنجیره ساخت آخرین نسخه کد منبع است. در صورت موفقیت آمیز بودن ساخت، تست‌های واحد اجرا می‌شوند. اگر تست واحد موفقیت آمیز باشد، ساخت برای تست‌های سیستمی (معمولا با استفاده از تست‌های خودکار) مستقر می‌شود. از وضعیت این فرآیند به تیم اطلاع داده می‌شود و گزارشی برای ارائه جزئیات مانند تعداد ساخت، نقص و تعداد تست‌ها ارائه می‌گردد.CI به افزایش تعداد کار و خروجی تحویل تیم های مهندسی کمک می کند. معرفی CI به سناریوی فوق به توسعه دهندگان نرم افزار اجازه می دهد تا به طور مستقل روی ویژگی ها به صورت موازی کار کنندCI یک عمل با ارزش و به خوبی تثبیت شده در سازمان های مهندسی نرم افزار مدرن و با کارایی بالا است.هزینه های ارتباطی یک محیط غیر CI می تواند به یک کار همگام سازی پیچیده و درهم تبدیل شود که هزینه های بوروکراتیک غیر ضروری را به پروژه ها اضافه می کند. این امر باعث انتشار کدهای کندتر با نرخ خرابی بالاتر می شود، زیرا توسعه دهندگان را ملزم می کند نسبت به ادغام ها حساس و متفکر باشند. با افزایش اندازه تیم مهندسی و پایگاه کد، این خطرات به طور تصاعدی رشد می کنند.CI به طور کلی در کنار کار توسعه نرم افزار استفاده می شود. یک سازمان فهرستی از وظایفی که نقشه راه محصول را تشکیل می دهند، تهیه می کند. سپس این وظایف برای تحویل در بین اعضای تیم مهندسی نرم افزار توزیع می شود. استفاده از CI این وظایف توسعه نرم افزار را قادر می سازد تا به طور مستقل و موازی در میان توسعه دهندگان اختصاص داده شده توسعه یابند. هنگامی که یکی از این وظایف کامل شد، یک توسعه دهنده آن کار جدید را به سیستم CI معرفی می کند تا با بقیه پروژه ادغام شود.مفهوم : CDهم مخفف واژگان Continuous Delivery است و هم به Continuous Deployment اشاره دارد به طوری که اصطلاح اول به فرآیندی اشاره می‌کند که از آن طریق نرم‌افزار دائماً آماده دیپلوی است اما اصطلاح دوم سازوکاری است که به صورت خودکار کدهای آماده را روی سرور/سرورهای اصلی منتشر می‌کنددر حقیقت CD توانایی اعمال تغییرات در محیط عملیات در هر لحظه با روشی سریع و مطمئن و به طور کاملا پایدار است. این تغییرات شامل همه انواع آن از جمله تغییرات پیکربندی در نرم‌افزار، زیرساخت و پلتفرم، افرودن ویژگی‌های جدید، رفع باگ و خطاها می‌شود.به وسیله محیط‌های تست مختلف، می‌توان یک Release Pipeline ایجاد کرد تا بتوان یک زیرساخت جدید را به طور اتوماتیک ایجاد کرد و نرم‌افزار را روی آن منتشر کرد. منظور از زیرساخت، سرور، سیستم عامل، سرویس دهنده وب، virtualization، شبکه و پیکربندی و تنظیمات آن‌ها است. به کمک این محیط‌های متوالی می‌توان فعالیت‌های طولانیIntegration، تست عملکرد و تست‌های پذیرش نهایی را به تدریج انجام داد. فرایند Continuous Delivery درRelease Pipeline باContinuous Integration شروع می‌شود و با انتشار و پایان تست در هر محیط، انتشار و تست در مرحله بعدی شروع خواه شد. مجموع این کارها به صورت حلقه‌های یک زنجیر در پشت سر هم قرار می‌گیرند و فرایند Continuous Delivery را تشکیل می‌دهند.بسیاری از مواقع دو مفهوم Continuous Delivery و Continuous Deployment به اشتباه به جای هم استفاده می‌شوند اما تقاوت این دو چیست؟ Continuous Deployment به این معنی است که هر تغییر در نرم‌افزار به طور اتوماتیک (یا بر طبق یک زمان‌بندی مشخص) در محیط عملیات منتشر شود اما Continuous Delivery به این معنی است که هر تغییر در نرم‌افزار، آماده انتشار در هر محیطی باشد اما ممکن است تصمیم این باشد که منتشر نشود (معمولا به دلایل کسب‌وکاری). این محیط‌ها شامل محیط تست تیم توسعه، محیط تست تیم کنترل کیفیت و محیط عملیات و هر محیط دیگری می‌شود.اکنون به مزایت معایب آن میپردازیم:مزایای CI / CDاستفاده از تغییرات کد خطر کمتری دارد.مراحل استقرار دستی را حذف می‌کند.سرعت حمل و نقل سریع‌ترافزایش پوشش کدمعایب CI / CDبرای راه‌اندازی خط لوله CI / CD سرمایه‌گذاری زیادی لازم است.بسیاری از تست‌های خودکار باید نوشته شوند.برای کار DevOps باید یک تغییر فرهنگی در آن شرکت ایجاد شود.سیستم‌های قدیمی معمولا از CI / CD پشتیبانی نمی‌کنند.امیدوارم این مطالب براتون مفید باشه و به دانشتون افزوده باشهگرداورنده:محدثه رستگاراستاد:دکتر مریم حاجی اسمعیلی.دکترای علوم کامپیوتر از دانشگاه کینگستون لندنDr.Maryam HajiesmaeiliPhD of computer science from Kingston university of Londonhttps://ir.linkedin.com/dr-maryam-hajiesmaeili-90930743