در بخش قبلی به تعریف مبانی کلی CI/CD پرداختیم. حال در این قسمت اصطلاحات متداول، مزایا و معایب آن را مورد بررسی قرار خواهیم داد:
اصطلاحات:
در ادامه به توضیح یکسری از اصطلاحات مهم و مرتبط با موضوع این مقاله خواهیم پرداخت:
اصطلاح Jobs: یک پارامتر اصلی در GitLab pipeline است. یک Job وظیفهای را شرح میدهد که یک پایپلاین باید انجام دهد، مانند کامپایل یا تست کردن یک کد. هر Job دارای یک اسم و یک قسمت اسکریپتی است که مشخص میکند چه کاری باید انجام شود. اگر تمامی Jobها در یک مراحل به درستی انجام شدهباشند، Pipeline وارد مرحله بعدی میشود.
اصطلاح Stages: این اصطلاح تعیین میکند که چه موقع Jobها به اجرا در بیایند. یک Stage بخشهای مختلفی را در CI/CD pipeline شامل میشود. ساختارها، تستها، بارگذاری نرمافزارهایی مانند Plan، Create، Verify، Configure و Release از جمله مثالهایی برای stage هستند.
اصطلاح Pipeline: یک Pipeline در GitLab مجموعهای از مراحلاند که هر کدام شامل یک یا چندین Job هستند. GitLab دارای انواع مختلفی از پایپلاینهاست که عبارتند از: basic، merge، parent-child و multi-project.
اصطلاح Commit: یک کامیت ذخیرهسازی و یا تغییر چیزی مانند یک کد یا فایل است. برای مثال، اگر شما بخواهید تغییراتی بر روی یک فایل ذخیرهسازی شده در repository ایجاد کنید باید تغییرات را کامیت کنید تا بتوانید فایل جدید را دوباره ذخیرهسازی کنید.
اصطلاح Runners: عوامل یا برنامههایی هستند که Jobهای CI/CD pipeline را از GitLab گرفته و به اجرا در میآورد. برای این کار Runnerهای مختلفی از جمله: GitLab Runners، Use Linux، Windows Runners و macOS Runners وجود دارند. این Runnerها پس از نصب شدن روی سیستم میتوانند Jobها را به اجرا در بیاورند ولی قابلیت کار کردن بر روی کانتِینِرها و Kubernetes clusters را هم دارد.(Container یک نرمافزار آماده اجرا است و Kubernetes clusters یک پلتفرم مدیریت کانتینر متن باز)
به طورکلی پایپلاینها به صورت خودکار کار میکنند و نیازی به اپراتور ندارند. با این حال، در مواقعی هم نیاز است که با این Pipelineها به صورت دستی تعامل داشت.

مزایای استفاده از CI/CD:
بهرهگیری از CI/CD فواید بسیار زیادی را برای شرکتها به همراه دارد. در ادامه به تعدادی از این مزایا میپردازیم:
رضایت مشتری: مواجه شدن با مشکلات و خطاهای کمتر باعث القای حس بهتر به کاربران میشود. این تجربه خوب باعث رضایتمندی هرچه بیشتر مشتریان و کاربران میشود.
تسریع زمان اعتبارسنجی: وقتی شما قادر به ایجاد تغییرات در هر لحظه باشید، میتوانید به صورت مستمر و در کوتاهترین زمان ممکن امکانات جدید را اضافه کنید و مشکلات برنامه را برطرف کنید. نتیجه این کار این است که برنامه شما در بازار همیشه حرفی برای گفتن خواهدداشت.
جلوگیری از بروز خطاهای بزرگ: تست مرحلهبهمرحله و در ابعاد کوچک باعث جلوگیری از بروز مشکلات بزرگ در سیستم میشود. این مزیت مسیری هموارتر در توسعه و کاهش استرس تیم توسعهدهنده را به دنبال خواهدداشت. زیرا مشکلات قابل پیشبینی بوده و رفع آنها سادهتر خواهدبود.
دقیقتر شدن زمانبندیها: برطرف کردن موانع و دشواریهای توسعه نرمافزار میتواند به ما این امکان را بدهد که پیشبینیهای دقیقتر و در نتیجه آن برنامهریزی دقیقتری داشته باشیم. قسمت کردن پروژه به بخشهای کوچکتر باعث میشود هر مرحله با دقت و سرعت بیشتری انجام شود و محصول نهایی نیز کمترین خطای ممکن را دارا باشد. این فرایند در نهایت به تحویلدهی به موقع پروژه، حفظ اعتبار و کسب درآمد بیشتر منجر میشود.
زمان آزاد بیشتر: طبق آمارهای اعلام شده، تخمین زده شده است که تقریبا بین 35-50% از وقت توسعهدهندگان در رابطه با تست، اعتبارسنجی و رفع خطا صرف میشود. با اتوماتیکسازی سیستم بسیاری از کارها توسط کامپیوتر انجام میشود، این به این معناست که تیم شما زمان آزاد بیشتری خواهدداشت و میتوان پروژههای بیشتری انجام دهد که درآمدزایی بیشتری نیز به همراه خواهدداشت.
کاهش دغدغههای ذهنی: دریافت بازخوردهای آنی از کدهای در حال اجرا به تیم توسعهدهنده اجازهی تمرکز و کار بر روی یک پروژه تا به پایان رساندن آن را میدهد. اینکار باعث جلوگیری از سردرگمی و کاهش دغدغههای ذهنی تیم میشود. این کاهش دغدغه، فضای لازم برای فکر کردن به پروژههای بیشتر و توسعه هرچه بهتر برنامهها را ایجاد میکند.
