CI/CD - قسمت 2 - تعاریف

در قسمت قبل با چالشهای موجود در سازمانها برای انتشار و توسعه نرم افزارها آشنا شدیم، در این قسمت با تعریف CI و CD و همچنین مزایای آنها آشنا می شویم.CI/CD بصورت فزاینده ای باعث افزایش سرعت توسعه و انتشار نرم افزارها می شوند فرایند Continuous Integration فرایند CI که می توان معادل های فارسی چون "ادغام مدام" یا "یکپارچه سازی مستمر" برای آن در نظر گرفت، به مجموعه فعالیت­ها و فرایندهایی اشاره دارد که به وسیله آنها توسعه دهندگان و برنامه نویسان سازمان تغییرات جدید کدهای خود را به سورس کنترل(سیستم مرکزی که کدهای مربوط به یک پروژه در آن قرار دارد) اضافه کنند. در کنار فرایند اضافه شدن تغییرات جدید به سیستم کنترل سورس، فعالیت­هایی مانند بیلد خودکار برای بررسی عدم تاثیر منفی تغییرات روی کدهای قسمتهای دیگر پروژه و همچنین اجرای تست های واحد برای بررسی کارکرد صحیح کدهای موجود و کدهای جدید انجام می شود تا مشکلات مربوط به یکپارچه سازی به شدت کم شود و تیم ها توانایی توسعه نرم افزار را بصورت منسجم تری داشته باشند. بصورت خلاصه تر، به فرایند ادغام یکپارچه کدها و بیلد کردن پروژه و اجرای تست های واحد به صورت اتوماتیک و بدون دخالت نیروی برنامه نویس CI می گویند. عملیات شرح داده شده در بالا، ممکن است در طول یک روز و در حین کار یک گروه توسعه نرم افزاری کوچک تا بزرگ بر روی یک نرم افزار، به دفعات متعددی اتفاق بیافتد(در بازه های زمانی مختلف و تعداد نیروهای مختلف اتفاق می افتد).مزایا اصلی CI چیست؟فواصل زمانی Check In یا Push توسط توسعه دهندگان کوتاه تر می شود و تغییرات جدید با سرعت بیشتری به سورس کنترل اضافه می شود.توسعه دهندگان از تغییرات یکدیگر با سرعت بیشتری با خبر می شوند(در صورت نیاز و وابستگی یک ماژول به ماژول دیگر، معطلی توسعه دهندگان کمتر می شود).با استفاده از بیلد های خودکار بعد از هر Check In تیم توسعه اطمینان حاصل می کند که خطا ها و باگ ها خیلی زود کشف می شوند و از هزینه و زمان توسعه کمتری صرف شناسایی باگ ها خواهد شد.در اثر بیلد خودکار، تغییرات در یک پروژه نرم افزاری به کیفیت پایداری خواهد رسید.با مانیتورینگ وضعیت بیلد­ها و اجرای تست ­های واحد بعد از هر بار Check In ، توسعه دهندگان و مدیران پروژه از وضعیت فعلی کار خود با خبر می شوند.بوجود آمدن فرهنگ جدید سازمانی که در نتیجه آن، تمرکز اعضا بیشتر بر روی توسعه نرم افزار صرف می شود تا هماهنگی جهت مسائل حاشیه ای مانند یکپارچه بودن کدها و ... .فرایند Continuous Deliveryفرایند CD که معادل فارسی " تحویل مداوم یا مستمر" را می توان برای آن در نظر گرفت، یک رویکرد در توسعه و تولید نرم افزار می باشد که بر اساس آن تیم توسعه نرم افزار بصورت سریع و مطمئن، همواره آماده است تا جدیدترین نسخه از نرم افزار تولیدی را در هر زمانی منتشر کند. این فرایند از زمان اضافه شدن یا تغییر کد در سرور سورس کنترل شروع می شود و شامل بیلد، تست، پیکربندی و انتشار در محیط های گوناگون تستی یا عملیاتی می باشد. اهمیتی ندارند که تیم های توسعه چه تعداد بزرگ باشند و یا نرم افزاری که مد نظر است توزیع شده باشد یا خیر، با استفاده از CD فرایندهای شرح داده شده بصورت ساده و قابل پیش بینی و روتین تبدیل می شوند. مفهوم دیگری که مرتبط با مفهوم CD می باشد Continuous Deployment می باشد که گاها با Continuous Delivery یکسان تلقی می شود. Continuous Deployment فرایند انتشار تماما خودکار نرم افزار اشاره می کند. فعالیت­های حوزه CD عموما بعد از CI روی می دهد، به این معنی که پس از بروزرسانی سورس کد و انجام تست ها، CD وارد عمل می شود و به تیم توسعه این اطمینان را می دهد که نرم افزار آماده انتشار می باشد. با استفاده از CD فرایند دریافت بازخورد از کاربران با سرعت بیشتری انجام می شود، در نتیجه بعد از اعمال تغییرات و دریافت بازخورد کاربران می توان تغییرات جدیدتر را با دقت بیشتری در نرم افزار اعمال کرد.مزایای اصلی CDانتشار نرم افزار با حداقل ریسک و بدون استرس برای تیم توسعه نرم افزاری به دلیل اینکه نسخه ای از نرم افزار همیشه آماده انتشار می باشد.بروزرسانی هر چه سریعتر نرم افزار با توجه با نیاز کاربربه دلیل آسان تر شدن فاز انتشار، بروزرسانی ها با فاصله زمانی کمتر و با تغییرات کوچکتری اعمال می شود، در نتیجه کیفیت محصول نرم افزاری بیشتر می شود.تمرکز بیشتر تیم تولید و توسعه بر روی کار توسعه نرم افزار به دلیل خودکار سازی فاز انتشار نرم افزار. تیم های توسعه با استفاده از CD دیگر درگیر مسائلی مربوط به انتشار نرم افزار نمی شوند و فقط روی توسعه و افزایش کیفیت نرم افزار تمرکز می کنند.همانطور که شرح داده شد، مزایای اصلی پیاده سازی CI/CD در سازمانها این می باشد که وقفه مابین توسعه نرم افزار و انتشار آن روی سرورهای اصلی از بین می رود. از نکات حائز اهمیت بعد از پیاده سازی CI/CD مانیتورینگ فرایندها می باشد. به دلیل بالا بودن سرعت تغییرات که حاصل خودکار سازی فرایندهاست، سرعت انتشار نرم افزار روی سرورهای اصلی به حدی بالا می رود که تیم توسعه نرم افزاری دقایقی(ممکن است به چند ثانیه نیز کاهش یاید) بعد از اعمال تغییرات روی کدها، نتایج کار خود را روی محصول اصلی که بصورت زنده در اختیار کاربران قرار دارد مشاهده می کنند، به همین دلیل از نکاتی که در این فرایند باید در نظر گرفته شود مانیتورنیگ می باشد.نیازمندیهای سخت افزاریبهتر است قبل از انتشار نرم افزار بر روی سرور عملیاتی، بر روی سرور تست منتشر شود تا از کارکرد نرم افزار مطمئن شداز آنجا که یک محیط ثابت(محیط عملیاتی : سروری که نسخه اصلی نرم افزار برای استفاده کاربران در آن قرار میگیرد) همیشه وجود دارد، بهتر است به ازای هر سرویس یا نرم افزار، یک محیط تست جهت تست توسط گروه خاصی از کاربران یا توسعه دهندگان، با توجه به مکانیزم پیاده سازی قرار دادن نرم افزار در سرور( داکرایز کردن، انتشار در ماشین مجازی، انتشار در یک سرور فیزیکی) وجود داشته باشد تا همیشه قبل از نهایی شدن انتشار نرم افزار در محیط عملیاتی واقعی، یک نسخه بر روی محیط تست قرار گیرد تا از کارکرد صد درصدی نرم افزارها اطمینان حاصل شود. واضح است که برای عملیاتی کردن CI/ CD نیاز به سروری جهت نگهداری کدها (سورس کنترل) و پیکربندی و تعارف مربوط به بیلد ها، پایپ لاین ها و .... می باشد.با مفاهیم بیلد، پایپ لاین، داکرایز کردن و ... در قسمتهای بعد آشنا خواهید شد.