آشنایی با بستر CICD

ادغام مستمر (CI) و تحویل مستمر (CD) دو فرآیندی هستند که در طراحی و توسعه نرم‌افزار مورداستفاده قرارگرفته و مزایای بسیاری با خود به همراه دارند که ازجمله آن‌ها می‌توان به اعمال تغییرات با سرعت و اطمینان بیشتر اشاره نمود.

به‌طور خلاصه CI به فرآیندی اشاره دارد که در قالب آن تغییرات اعمال‌شده جدید به‌صورت خودکار با مخزن اصلی ادغام می‌شوند. اما در مورد واژه CD دو معنا می‌تواند مورداستفاده قرار گیرد. یکی به معنای Continuous Delivery است که در قالب آن نرم‌افزار به صورت دائم آماده استقرار می‌باشد و معنای دوم به Continuous Deployment اشاره دارد که بیان‌گر سازوکاری است که به‌صورت خودکار کدهای آماده را بروی سرور اصلی منتشر می‌کند.

در ادامه چرخه‌ی فرآیندها بررسی خواهند شد و به معرفی ابزارهای مربوطه خواهیم پرداخت.

در روند CI تغییرات صورت گرفته در کد توسط توسعه‌دهندگان مختلف در خط اصلی پروژه ادغام می‌گردد. این خط اصلی معمولاً توسط یک مخزن اشتراکی مورد دسترسی قرار می‌گیرد. . هر ادغام می‌تواند توسط اجرای Build و آزمون‌ها (syntax , security , …) موردبررسی قرارگرفته تا تضمین کند کد ادغام‌شده قابل‌اطمینان است. اصولاً اجرای تست بخشی از فرآیند CI نیست اما معمولاً با آن پیاده‌سازی می‌شود. بعد از اطمینان از کدهای ادغام‌شده، می‌توان وارد مرحله stage شد و بر روی یک محیط و یا سرور تست نسخه جدید مورد آزمایش قرار گیرد و یا وارد مرحله deploy on servers شود و بر روی سرورهای عملیاتی پروژه استقرار صورت پذیرد.


معرفی ابزارهای مورداستفاده در روند CI/CD

  • ابزار Gitlab: مدیریت سورس کدها توسط این ابزار انجام می‌گیرد که هم‌محلی برای ذخیره‌سازی است و هم‌محلی برای ثبت تغییرات به همراه تاریخ و کاربری که تغییرات را انجام داده است.
  • ابزار Sonarqube: مسئول انجام آزمون‌های عملکردی و امنیتی بر روی به کدها می‌باشد.
  • ابزار Gitlab-runner: مسئول انجام آزمون‌های syntax بر روی کدها و همچنین مسئول استقرار کدهای جدید بر روی سرورها می‌باشد.
  • ابزار Nexus: ابزاری برای نگهداری تصاویرها و همچنین کامپوننت های موردنیاز برای چک کردن کدها می‌باشد.

نحوه اجرا و فازبندی فرآیند CI/CD

ابتدا سورس کدهای مربوط به برنامه‌ها به‌صورت جداگانه داخل Gitlab ذخیره می‌شوند و برای افرادی که دسترسی دارند به آن کد بر اساس role هر شخص به ایشان مجوزهای مربوطه (developer, maintainer, admin) داده خواهد شد.

در ادامه هر فرد بر روی سیستم خود پروژه را pull کرده و تغییرات لازم را انجام می‌دهد و سپس آن را دوباره به مخزن push می‌نماید. بعد از هر بار تغییر gitlab-runner وارد چرخه می‌شود و کد تغییریافته را چک می‌کند، که در صورت نیاز از کامپوننت ها و مخازن داخل nexus استفاده می‌نماید، و در صورت تائید، وارد مرحله‌ی بعد که در فایل gitlab-ci.yaml تعریف‌شده می‌گردد که می‌تواند مرحله stage و یا مرحله استقرار باشد.

جهت راه‌اندازی زیرساخت CI/CI مراحل زیر باید موردتوجه قرار گیرد:

  • پیاده‌سازی و تحویل گیت لب برای ذخیره‌سازی و متمرکز سازی سورس کدها
  • پیاده‌سازی نکسوز برای ذخیره‌سازی ایمیج ها و ساخت ریپازیتوری برای کدها
  • راه‌اندازی گیت لب رانر به ازای هر پروژه و گروه برای چک کردن کد و به‌صورت موازی راه‌اندازی sonarqube برای تست‌های QC
  • اتصال گیت لب رانر به محیط تست stage و جداسازی مرحله تست و دیپلوی در روال CD
  • راه‌اندازی مسیر دیپلوی بر روی سرورهای عملیاتی