CI/CD چیست؟
۱۴ اسفند ۱۴۰۰
CD/CD را میتوان روشی خودکار برای ارائه مستمر نرمافزار در حال توسعه به کاربران نهایی دانست. درک این تعریف در ابتدای کار سخت است اما پس از آشنا شدن با مفاهیمی مانند continuous integration، continuous delivery و continuous deployment بسیار راحتتر از قبل میتوانید بُعدهای مختلف این روش را درک کنید.
CI (Continuous integration) چیست؟
CI فرایندی است که در آن نرمافزار ما build شده و تستهای نرمافزاری اعم از unit و integration testها بهصورت خودکار اجرا میشوند.
حتما در توسعهی مدرن نرمافزار مشاهده کردهاید که برنامهنویسان و توسعهدهندگان مختلفی در حال اضافه کردن قابلیتهای جدید و بهبود ساختارهای فعلی یک پروژه هستند. مدیریت چنین پروژههایی با استفاده از یک DVCS مانند Git سادهتر میشود اما باز هم Merge کردن دستی Branchهای مختلف و بررسی کدها یا رفع Conflict بین تغییرات توسعهدهندههای مختلف میتواند زمانبر و بسیار خسته کننده باشد.
حال بهکمک CI تغییرات توسعهدهندگان با سرعت و اطمینان خاطر بیشتری Merge میشود و همچنین اگر Conflict در کدها وجود داشته باشد، رفع آن سادهتر خواهد بود.
CD (Continuous delivery) چیست؟
پس از CI، نوبت به Continuous delivery میرسد. طی این فرایند، release نرمافزار نهایی بهصورت خودکار انجام میشود. هدف از continuous delivery این است که همیشه کدهایی داشته باشیم که قابلیت استقرار در حالت Production را داشته باشند.
CD (Continuous deployment) چیست؟
آخرین مرحلهی CI/CD pipeline را میتوانیم Continuous deployment بدانیم که طی این فرایند، برنامهی ما بهصورت خودکار در محیط Production مستقر میشود.
در عمل درصورتی که تستها در فرایند CI بهطور کامل pass شده باشند و در فرایند Continuous delivery یک نسخه از نرمافزار release شده باشد، با اضافه شدن Continuous deployment به این فرایند، تغییرات توسعهدهنده در عرض چند دقیقه بهدست کاربران نهایی میرسد.
تفاوتهای CI و CD
CI همیشه به Continuous integration اشاره دارد که طی این فرایند، تغییرات جدید اعمال شده در کدها build و تست میشود و درصورتی که مشکلی وجود نداشته باشد، کدها Merge خواهند شد.
CD مخفف Continuous delivery و Continuous deployment است که گاها بهدلیل شباهت این دو مفهوم، بهجای یکدیگر استفاده میشوند. البته هر دو این مفاهیم مراحل بعدی pipeline هستند اما با جدا کردن این دو میتوانیم محدودهی مشخصتری از کارها را برای هرکدام در نظر بگیریم.
در Continuous delivery نسخهای از نرمافزار را خواهیم داشت که آمادهی استقرار در محیط Production است و در Continuous deployment، نسخهی نهایی نرمافزار از ریپازیتوری اصلی در محیط Production مستقر میشود. به این شکل پس از مرحلهی Continuous deployment، کاربران نهایی میتوانند به آخرین تغییرات اعمال شده در نرمافزار دسترسی داشته باشند.
ابزارهای متداول در CI/CD
ابزارهای CI/CD میتوانند در سادهتر کردن مراحل توسعه، تست و استقرار نرمافزار بسیار مفید باشند. Jenkins یکی از شناخته شده ترین ابزارهای متنباز برای CI/CD است. این ابزار بهگونهای طراحی شده که شما میتوانید از آن برای مدیریت هرچیزی از یک سرور CI ساده تا یک CD hub کامل استفاده کنید.
Tekton Pipelines ابزار دیگری است که میتوانیم آن را فریمورک CI/CDبرای پلتفرم Kubernetes بدانیم. این ابزار به ما امکان پیادهسازی یک cloud-native CI/CD استاندارد بر روی کانتینرها را میدهد.
ابزارهای متنباز دیگری که میتوانیم به آنها اشاره داشته باشیم، عبارتند از:
- Spinnaker: یک پلتفرم CD که بهکمک آن می توانیم multicloud environments ایجاد کنیم.
- GoCD: یک سرور CI/CD که بر modeling و visualization متمرکز است.
- Concourse: ابزاری متنبار که کارهای continuous را انجام میدهد.
- Screwdriver: یک build platform که برای CD طراحی شده.
همچنین ممکن است شما نام ابزارهای GitLab، CircleCI، Travis CI، Atlassian Bamboo را نیز شنیده باشید. البته ابزارهای دیگری مانند Ansible، Chef و Puppet یا Docker، rkt و cri-o نیز در DevOps وجود دارند که احتمالا میتوانند بخشی از یک فرایند CI/CD باشند.