كل ماتريد معرفته حول CI/CD 🚀

تخيل انك تشتغل على مشروع كبير ومع كل تحديث تقوم بعمل عملية بناء للمشروع وعمل اختبارات يدوية للتأكد من كل شيء يشتغل حسب المطلوب قبل رفع التحديثات. وبعد التأكد تقوم برفع التحديثات بطريقة يدوية.

لاحظ ان هذه الخطوات يتم تكرارها كل مرة تقوم بعمل تحديثات جديد وتصبح مملة جدا مع الوقت :unamused:.

دعني اخبرك ان هناك طريقة لجعل كل هذه الخطوات تحدث تلقائيا بعد كل عملية رفع (Push) للكود :star_struck: :tada:.

1. التكامل المستمر :building_construction: :white_check_mark: Continues Integration (CI)

المقصود بالتكامل المستمر هو حين يقوم المطور برفع التحديثات يتم عمل بناء للمشروع و عمل اختبارات تلقائية (يقوم بعملها المطور تسمى unit tests) ويجب ان يتجاوز المشروع هذه الاختبارات حتى يتم رفع التحديثات وهذه الخطوة تفيدنا في معرفة الأخطاء والمشاكل مبكراً في وقت التطوير.

2. التسليم المستمر :package: Continues Delivery (CD)

المقصود بالتسليم المستمر مثل ماخمنت فاهي تعني عملية رفع التحديثات وهذه العملية تتم تلقائيا عند تجاوز الاختبارات التلقائية وفي هذه العملية يكون المطور واثق ان الكود جاهز للإطلاق يدويا.

يدوياً!! ظننت ان هذه العمليات ستجعل كل شيء تلقائي :sleeping:

اذا كنت واثق من نظامك فا يمكنني القول نعم هنا يأتي دور النشر المستمر او Continues Deployment

3. النشر المستمر :rocket: Continues Deployment (اختياري)

في هذه العملية يتم اطلاق المشروع للمستخدم النهائي بشكل تلقائي بعد نجاح العمليات السابقة.

لكن جعل هذه العملية تلقائية يعتبر خطير حيث يجب على المطور التأكد بأن كل شي مصمم بعناية و ان تكون الاختبارات دائما محدثة.
لهذا بعض المطورين يستغنو عن التلقائية في هذه العملية حتى يتم التأكد من صحة التحديثات يدويا واطلاق المشروع يدويا.

حسنا عرفنا كل هذه المفاهيم لكن كيف يتم تنفيذها ؟ هنا يأتي دور CI/CD PipeLine :point_down:.

ماهي CI/CD PipLine

هذه الاداة هي اللتي تقوم بتنفيذ الخطوات التلقائية مثل بناء التطبيق وتنفيذ الاختبارات وإطلاق التطبيق حيث لديها عدة عناصر سنتعرف عليها في النقطة التالية

مسار عمل CI/CD PipLine ⁦ :railway_track:

هذه هي العناصر الأساسية لل CI/CD Pipline حيث تبدأ من رفع التعديلات الى اطلاق التطبيق.

مصدر الصورة

مرحلة المصدر :information_source: Source Phase

في هذه المرحلة يقوم المطور بعمل push للتعديلات الى مستودع git والتي بدورها ترسل اشعار الى اداة CI/CD لتفيذ ال CI/CD Pipline.
لمعرفة git وكيفية التعامل معها انصحك بهذا المقال من هشام أحمد

مرحلة البناء :building_construction: Build Phase
في هذه المرحلة يتم بناء التطبيق عبر دمج الكود البرمجي مع المكتبات المعتمدة عليه اذا كانت لغة البرمجة المستخدمة Java او ++C/C او اي لغة تحتاج الى Compiler فايتم عمل ترجمة (compile) للكود.

بعض تطبيقات الويب يستخدمون دوكر (Docker) للإطلاق ففي هذه المرحلة يتم بناء حاويات دوكر (الايام القادمة ساتكلم عن دوكر, باختصار هو يتيح لك عمل حاوية للتطبيق تحتوي على كل الاعتمادات ونظام التشغيل لتسهيل عملية اطلاق التطبيق).

مرحلة الاختبار :white_check_mark: Test Phase
في هذه المرحلة يتم تنفيذ الاختبارات التلقائية التي قام بعملها المطور لمنع الاخطاء البرمجية من الوصول الى المستخدم النهائي.

مرحلة الاطلاق :rocket: Deploy Phase

في هذه المرحلة يكون التطبيق جاهز للاطلاق وعادة مايتم عمل اكثر من بيئة للإطلاق.
بيئة التطوير حيث يتم اطلاق التطبيق الى هذه البيئة ويقوم المطور باختبار التطبيق كأنه مستخدم عادي ويتأكد من اذا كان كل شي جاهز.

اذا كان كل شي جاهز يقوم المطور بدمج التعديلات الى master branch لرفع التعديلات لبيئة الانتاجية (Production)

اذاً لماذا نحتاج الى CI/CD :thinking:؟

هذا الاداة تساعدنا فعلا على الانتاجية والإبداعية حيث يركز المطور على ماهو مهم في المشروع ويتم تكرار هذه العمليات تلقائياً. هذه بعض الفوائد التي ستتحصل عليها بعد استخدامك CI/CD:

  • خفض التكاليف

  • المزيد من الموثوقية في الاختبارات

  • سرعة في اطلاق اصدارات من التطبيق

  • تعديلات اقل في الكود

  • يسهل صيانة وتحديث التطبيق

بعض أدوات CI/CD :hammer_and_wrench:

  • GitLab CI/CD
  • GitHub Actions
  • Jenkins
  • Travis CI
  • CircleCI

بهذا نكون انتهينا من المقال متنياً انكم استفدتم وباذن الله سيتم نشر مقالات اخرى عن كل مايتعلق بال Backend و DevOps تابع حسابي الشخصي على فيسبوك لتكون على اطلاع بالمقالات القادمة :blush:

10 Likes

جميل جدا التعامل مع هذه الأدوات خاصة اذا كنت مطور backend
مقال جميل جدا أخي أحمد :heart_eyes: :heart_eyes:
بارك الله فيك

1 Like

اكيد بتسهل علينا تكرار وتعب كثير :face_with_thermometer:

شكرا لك اخي مصعب :heart_eyes:

1 Like

شكراً موضوع رائع :green_heart:

1 Like

سعيد انه اعجبك :relaxed:

1 Like

بارك الله فيك . موضوع قيم جدا و مهم جدا :heart: :muscle:

1 Like

برافو! استمر!
حاليا: حسب المشاريع التي أعمل عليها، استخدم github Actions لكن لم نضطر الى استخدام المزيد من الأدوات
الـCI/CD بشكل عام وفر علينا الكثير والكثير

2 Likes

فيك بارك الله … نعم CI/CD مهم جدا وبيوفر علينا وقت كثير في عمليات متكررة ومملة

شكرا لك :blush:
من ناحيتنا بنستخدم GitLab CI/CD وطبعا اي أداة تفي بالغرض المهم تعفينا من العمليات التكراكرية اللي بتزعج الواحد :joy:

1 Like