CI/CD یک روش توسعه نرمافزار است که بهطور اختصار برای Continuous Integration (ادغام مداوم) و Continuous Deployment (پیادهسازی مداوم) استفاده میشود. CI/CD روشی است که در آن تغییرات کد بهصورت مداوم و بهصورت خودکار ادغام، تست و انتشار داده میشوند.معمولاً CI/CD بهمنظور افزایش کیفیت نرمافزار، بهبود بهرهوری تیمهای توسعه و افزایش سرعت و اطمینان در روند انتشار نرمافزار استفاده میشود.
در CI/CD، Continuous Integration به معنای ادغام مداوم تغییرات کد است. وقتی تیم توسعهدهندهها در حال کار روی یک پروژه هستند، هر بار که یک تغییر کد انجام میدهند، آن تغییر بهصورت خودکار در ریپازیتوری اصلی پروژه ادغام میشود. سپس فرآیند CI شروع میشود و اجرای خودکار تستها، لینترها (linter) و سایر فعالیتهای ادغام توسط سیستم CI انجام میشود. این فعالیتها به منظور تشخیص و رفع خطاها و مشکلات ممکن در کد و اطمینان از صحت و سازگاری تغییرات است.
پس از عبور از مرحله Continuous Integration، فرآیند Continuous Deployment شروع میشود. در این مرحله، تغییرات کد که با موفقیت ادغام شدهاند، بهطور خودکار به محیط تست و سپس به محیط تولید انتقال داده میشوند. این فرآیند میتواند شامل مراحلی نظیر ساخت (build) نرمافزار، آزمونهای اتوماتیک (automated testing)، مستقرسازی (deployment) و روشن شدن (provisioning) محیط مورد نظر باشد.
با استفاده از CI/CD، تیمهای توسعه قادر خواهند بود تغییرات کد را سریعتر و با کمترین خطا به محیط تولید انتقال دهند، امکان تست و تحویل نرمافزار را تسریع کنند و با بهبود کیفیت و عملکرد سیستم، رضایت کاربران را افزایش دهند.
CI/CD در صنعت نرمافزار در بسیاری از موارد استفاده میشود. در زیر تعدادی از موارد استفاده از CI/CD را بررسی میکنیم:
1. توسعه نرمافزار تیمی: CI/CD برای تسهیل فرآیند توسعه نرمافزار در یک تیم توسعهدهنده مورد استفاده قرار میگیرد. با ادغام مداوم تغییرات کد و اجرای خودکار تستها و فعالیتهای مشابه، تیم میتواند به صورت هماهنگ و مداوم به توسعه نرمافزار پرداخته و مشکلات زودتر تشخیص و رفع شوند.
2. افزایش کیفیت نرمافزار: با استفاده از CI/CD، تستها و فعالیتهای ادغام به صورت خودکار انجام میشوند، که منجر به کاهش خطاها و مشکلات در نرمافزار میشود. همچنین، اطمینان حاصل میشود که تغییرات جدید در کد، با کلیت سیستم سازگار هستند و به طور مداوم تست میشوند.
3. افزایش سرعت توسعه و تحویل نرمافزار: CI/CD با اجرای خودکار و مداوم تستها، لینترها و فعالیتهای مشابه، زمان مورد نیاز برای تشخیص و رفع خطاها کاهش مییابد. این باعث افزایش سرعت توسعه نرمافزار و تحویل نسخههای جدید به کاربران میشود.
4. امکان انتشار پیوسته: با استفاده از CI/CD، تغییرات کد به طور خودکار و مداوم به محیط تست و سپس به محیط تولید انتقال داده میشوند. این به تیمها امکان میدهد تغییرات جدید را به صورت پیوسته و بهروز در دسترس کاربران قرار دهند.
5. محیط تست و تولید مشابه: با استفاده از CI/CD، محیط تست و تولید معمولاً به یکدیگر نزدیک میشوند، به طوری که محیط تست به یک نسخه معتبر از کد متصل میشود و تستها در محیطی شبیه به محیط تولید اجرا میشوند. این کمک میکند تا مشکلاتی که در محیط تولید احتمال وجود دارند، در محیط تست نیز تشخیص داده شوند و بهبودی در عملکرد سیستم حاصل شود.
6. راهاندازی خودکار: CI/CD میتواند در راهاندازی خودکار سیستمها و بستههای نرمافزاری نیز استفاده شود. به عنوان مثال، با استفاده از ابزارهای CI/CD، میتوان فرآیند ساخت و راهاندازی خودکار برنامهها را پیادهسازی کرده و با انتشار تغییرات کد، برنامهها را به طور خودکار بروزرسانی کرد.
این فقط تعدادی از موارد استفاده از CI/CD است و در عمل میتواند به شکلهای متنوع دیگری نیز به کار برود، بسته به نیازها و محیط توسعه و تحویل نرمافزار.
چندین بستر محبوب برای پیادهسازی CI/CD در صنعت نرمافزار وجود دارد. در زیر، چند بستر رایج و محبوب را نام میبرم:
1. Jenkins: Jenkins یک بستر محبوب و قدرتمند برای CI/CD است. آن را میتوان به صورت محلی بر روی سرورها نصب کرد و از طریق رابط کاربری وب قابل مدیریت است.
2. GitLab CI/CD: GitLab CI/CD یک بستر CI/CD کامل است که به طور مستقیم با سیستم مدیریت نسخه GitLab ادغام شده است. این بستر قابلیتهای مدیریت و تنظیمات گستردهای در زمینه CI/CD فراهم میکند.
3. CircleCI: CircleCI یک بستر CI/CD ابری است که قابلیت اجرای موازی و توزیع شده تستها را داراست. این بستر با سیستمهای مدیریت نسخه مانند GitHub و Bitbucket هماهنگی دارد.
4. Travis CI: Travis CI یک بستر CI/CD محبوب است که بهطور خاص برای پروژههای مستقر شده در GitHub طراحی شده است. این بستر بهصورت ابری ارائه میشود و قابلیتهای متنوعی را برای ادغام مداوم، تست و تحویل نرمافزار فراهم میکند.
5. Azure DevOps: Azure DevOps (قبلاً شناخته شده به عنوان Visual Studio Team Services یا VSTS) یک بستر جامع برای توسعه نرمافزار است که شامل ابزارهای CI/CD، مدیریت پروژه و کنترل نسخه میشود. این بستر توسط مایکروسافت ارائه میشود.
6. Bitbucket Pipelines: Bitbucket Pipelines ابزاری است که به صورت مستقیم با سیستم مدیریت نسخه Bitbucket ادغام شده است. این بستر قابلیتهای CI/CD را برای توسعهدهندگان در دسترس قرار میدهد.
7. AWS CodePipeline: AWS CodePipeline یک سرویس مدیریت CI/CD است که توسط امازون ارائه میشود. این سرویس امکان ایجاد فرآیندهای CI/CD سفارشی را با استفاده از ابزارها و سرویسهای دیگر از طریق رابط کاربری وب فراهم میکند.
مراحل CI/CD به طور کلی شامل سه بخش اصلی هستند: Continuous Integration (CI)، Continuous Delivery (CD) و Continuous Deployment (CD). در زیر مراحل این سه بخش را بیان میکنیم:
Continuous Integration (CI):
1. مدیریت کد: تیم توسعهدهنده کدها و تغییرات را در سیستم مدیریت نسخه (مانند Git) ذخیره و به روز میکند.
2. بررسی تغییرات: هر بار که تغییری در کد صورت میگیرد، سیستم CI خودکاراً اجرا میشود. این مرحله شامل کامپایل و اجرای تستها بر روی کدها است.
3. انتشار نسخههای تجربی: در صورت عبور از تستها و اجرای درست در محیط CI، نسخههای تجربی از نرمافزار ساخته میشود. این نسخهها برای بررسی و تست توسط تیم توسعهدهنده و تیم تست استفاده میشوند.
Continuous Delivery (CD):
4. بناکردن (Build): در این مرحله، نرمافزار بر اساس کدهای منبع و بستهبندی میشود. این بستهبندی ممکن است شامل فایلهای باینری، کتابخانهها، فایلهای پیکربندی و موارد دیگر باشد.
5. محیط تست: بسته نرمافزار در یک محیط تست مجزا نصب و اجرا میشود تا تمامی تستها و اعتبارسنجیها روی آن انجام شود. این مرحله شامل تستهای واحد، تستهای انتگرال و تستهای نمایشی میشود.
6. تحویل: در این مرحله، نرمافزار به تیمهای مربوطه برای بررسی و ارزیابی تحویل میشود. این شامل تیمهای تست، تیم محصول و تیم عملیات است.
Continuous Deployment (CD):
7. محیط تولید: اگر نرمافزار با موفقیت تست شود، برای محیط تولید راهاندازی و نصب میشود. این محیط شامل سرورهای اصلی و زیرساختهای تولید است که به صورت عمومی در دسترس کاربران است.
8. مانیتورینگ و ارزیابی: نرمافزار در محیط تولید مورد مانیتورینگ قرار میگیرد تا از عملکرد و عملیات آن مطلع شوند. این شامل نگهداری و بررسی عملکرد سیستم، رفع اشکالات و بهبودهای مداوم است.
توجه کنید که نحوه اجرای این مراحل و ابزارهای استفاده شده میتواند بسته به شرایط و نیازهای شما متفاوت باشد.
به شما نمونهای از CI/CD با استفاده از گیتهاب (GitHub) را توضیح میدهیم:
1. راهاندازی مخزن (Repository) در گیتهاب:
- ابتدا، یک مخزن جدید در گیتهاب ایجاد میکنید که شامل کد منبع نرمافزار شما است.
2. فایلهای تنظیمات:
- در ریشه مخزن خود، یک فایل تنظیمات CI/CD بنام `.github/workflows` ایجاد میکنید.
- درون این دایرکتوری، یک یا چند فایل YAML با پسوند `.yml` یا `.yaml` ایجاد میکنید برای تنظیم فرآیندهای CI/CD مختلف.
3. تعریف فرآیند CI/CD:
- درون فایل تنظیمات YAML، مراحل مختلف فرآیند CI/CD را تعریف میکنید. به عنوان مثال، شامل مراحلی مانند اجرای تستها، لینترها، بناکردن (build) و انتشار (deploy) میشود.
- هر مرحله شامل یک یا چند وظیفه است که باید انجام شود، مانند اجرای دستورات خاص، اجرای اسکریپتها، تنظیم محیط و غیره.
4. استفاده از اکشنها (Actions):
- در هر مرحله، میتوانید از اکشنهای آماده استفاده کنید که توسط گیتهاب ارائه میشوند. این اکشنها بستههای کد قابل استفاده هستند که عملیات خاصی را برای شما انجام میدهند. مثلاً، اجرای تستها، بناکردن برنامه، ایجاد بستههای نصبی و غیره.
5. رویدادهای محرک (Trigger Events):
- برای هر فرآیند CI/CD، میتوانید تعیین کنید که در کدام رویدادها و اقدامات در گیتهاب فرآیند CI/CD اجرا شود.