توضیحاتی مختصر راجع به CI/CD

سرواژه CI/CD درواقع پلی است که فاصله بین توسعه پروژه و عملکرد آن و تیم های مربوطه را کاهش میدهد. این کار با استفاده از اتوماتیک کردن فرایند های مربوط به ساخت (Build) و تست کردن پروژه و قراردادن آن برروی سرور اصلی (Deployment) انجام می شود.سرواژه‌های CI و CD دقیقا یعنی چی؟سرواژه CI یا Continuous Integration یک روش توسعه نرم افزار است که در آن تا حدامکان سعی می شود که تغییراتی که توسط توسعه دهنده ها در کد اعمال میشه را با کدی که در ریپازیتوری اصلی وجود داره مرج بشود. (چندین بار در روز)سرواژه CD یا Continuous Delivery درواقع یک لایه برروی CI هست که به دنبال این است که تمام پروسه انتشار نسخه جدید از نرم افزار را اتوماتیک کند.درواقع با CI بعد از هر تغییری که در کد انجام میشود (درواقع بعد از هر کامیت) به صورت اتوماتیک باعث می شود که پروژه مورد نظر دوباره ساخته شده (Build) و تست های آن انجام شود و گزارش آن دراختیار توسعه دهنده ها قرار داده می شود.فرآیند CI/CD شامل چه المان ها و مراحلی میشود؟درواقع این بستگی زیادی به پروژه داره ولی مرحله هایی که معمولا درنظر گرفته میشه تا نسخه جدیدی از نرم افزار انتشار پیدا کند شامل :اگر درهرکدام از این مراحل مشکلی وجود داشته باشد به توسعه دهنده اطلاع داده میشود تا مشکل و باگ موجود برطرف شود و مراحل از اول اجرا می شود.Build کردن پروژهدر این مرحله کد مرجع (source code) را به همراه کدها و کتابخانه های وابسته (dependencies) مرج می کنیم تا بتوانیم یک نمونه قابل اجرا از محصول را که قابلیت ارائه شدن به کاربر را داشته باشد را از پروژه بسازیم.درصورت اینکه پروسه در این مرحله به مشکل برخورد کند نشان دهنده این است که مشکل اساسی در پروژه وجود دارد.تست کردن پروژهدر این فاز برای تشخیص اینکه محصول پس از build شدن به طور صحیح کار میکند یا نه، تست هایی که توسط توسعه دهنده ها نوشته شده انجام می شود. این تست ها هم رفتار محصول و هم استایل کد را چک میکنند. بررسی استایل کد از این جهت مفید است که خوانایی کد را برای همه اعضای تیم توسعه بالا می برد.باتوجه به اندازه پروژه و پیچیدگی آن این فاز ممکن است از چند دقیقه تا چندین ساعت طول بکشد. در خیلی از پروژه های بزرگ این فاز به چندین مرحله تقسیم می شود و در نهایت تمام سیستم چک می شود.در صورت اینکه در این مرحله به مشکل برخورد کند نشان دهنده مشکلاتی بوده است که در هنگام نوشتن کد توسعه دهنده ها دقت کافی را نداشتن و پیش بینی آن را نکردند. (که خوب برای همین تست میکنیم دیگه!!)ومرحله نهایی Deploymentدر این مرحله که نسخه قابل اجرا پروژه ساخته شده و همه تست های تعریف شده را با موفقیت پشت سر گذاشته، آماده است که در اختیار کاربران قرار بگیرد. معمولا چند محیط برای deployment وجود دارد (معمولا بتا(Beta) یا Staging و Production نامیده می شوند). در محیط Beta محصول همچنان در مرحله تست قرار دارد. (این نسخه برای تست ممکن است در اختیار کاربران قرار بگیرد یا توسط یک تیم مورد بررسی قرار بگیرد.) و در محیط Production نسخه جدید از محصول در اختیار کاربران قرار گرفته است.مثالی از یک پروسه CI/CDپروسه میتواند خیلی ساده یا در صورت اینکه پروژه بزرگ باشد خیلی پیچیده شود. یک مثال ساده از این پروسه که برای یک پروژه به زبان GO نوشته شده است را میتوانید در اینجا ببینید. این پروسه کد را کامپایل کرده، استایل آن را بررسی و تست های نوشته شده را اجرا می کند.فریم ورک های CI/CD1. Jenkins : یکی از ابزارهای open-source موجود برای CI/CD است که با Java نوشته شده است و cross platform است. مجموعه ای از مثال ها برای این ابزار را میتوانید در اینجا ببینید.2. TeamCity : یکی از ابزارهای server based برای CI/CD است بر پایه جاوا که توسط شرکت jetbrains توسعه داده شده است و برای پروژه های open-source رایگان است.3. Travis CI : همانند Jenkins جزو اولین ابزارها برای CI/CD است و در ابتدا فقط برای پروژه های open-source ارائه شد. درحال حاضر پروژه های close-source را هم پشتیبانی میکند. با زیان Ruby نوشته شده و 30 زبان برنامه نویسی را پشتیبانی میکند.و تعداد زیادی ابزار دیگر که میتوان به GoCD (open-source)، CircleCI، Bamboo،Semaphore و ... اشاره کرد.و در نهایت یکی از مزایای اجرای این روش این است که انتشار نسخه جدید از پروژه ویا رفع مشکلات موجود در آن و deploy کردن آن راحت تر انجام می شود و زمان کمتری را صرف میکند و دیگر لازم نیست که ساعت ها و یا روزها زمان صرف بشود تا پروژه قابل ارائه شدن به کاربران بشود.منابعhttps://www.redhat.com/en/topics/devops/what-is-ci-cdhttps://www.redhat.com/en/topics/devops/what-cicd-pipelinehttps://martinfowler.com/articles/continuousIntegration.htmlhttps://www.lambdatest.com/blog/31-best-ci-cd-tools/https://semaphoreci.com/cicdhttps://semaphoreci.com/blog/cicd-pipeline