CI/CD

وده اختصار لـ Continuous Integration/Continuous Deployment ... خلينا نوضح الفرق بينهم ببساطة...

📍 إيه هو الـ Continuous Integration (CI)؟

الـ Continuous Integration يعني ببساطة إزاي ندمج الشغل اللي بنعمله في المشروع بطريقة مستمرة وسريعة.

تخيل إنك بتشتغل في فريق كبير، وكل واحد في الفريق بيكتب كود لوحده. لو كل واحد فضل يكتب كود من غير ما يدمج شغله مع الباقيين، هتحصل مشاكل كتير لما تيجي تجمع الكود مع بعض. هنا بييجي دور CI.


الفكرة إن كل واحد من الفريق أول ما يخلص جزء صغير من الكود، يرفع التغييرات بتاعته على الـ repository (زي GitHub مثلًا)، وساعتها بيشتغل برنامج أو أداة أوتوماتيك (زي Jenkins أو GitLab CI) بتعمل فحص سريع للكود عشان تتأكد إنه مفيش مشاكل.

لو في حاجة غلط، بترجع لك رسالة إن في حاجة وقعت أو في خطأ في جزء معين من الكود، وبتقدر تصلح بسرعة.

ده معناه إن كل ما نضيف حاجة جديدة للمشروع، بنتأكد إنها بتشتغل كويس وبتندمج صح مع بقية الكود.


الفائدة الكبيرة هنا هي إن الفريق مش بيستنى كتير عشان يعرف لو في مشاكل، ولا حد فيهم بيقعد يصلح كود كتبوه من شهر أو شهرين ونسوه. كل حاجة بتحصل بسرعة والدمج المستمر ده بيخلي الكود دايمًا "Clean" وسهل في الـ Debugging.


📍 إيه هو الـ Continuous Deployment (CD)؟

الـ Continuous Deployment أو Continuous Delivery (والفرق بينهم بسيط وهنوضحه كمان شوية). أول حاجة هي إن Continuous Delivery معناها إن الكود بعد ما يخلص الـ CI ويتأكد إنه شغال صح، ممكن ننقله للـ (staging environment) عشان نختبره أكتر ونتأكد إنه تمام.

أما بقى الـ Continuous Deployment، فده بياخد خطوة زيادة:

لو الكود اتعمل عليه كل الاختبارات وتأكدنا إنه مفيهوش مشاكل، بيروح أوتوماتيك على بيئة الـ (production) من غير تدخل بشري. يعني كل تغيير جديد بيتضاف للمشروع بيتم نشره للمستخدمين مباشرة.


⚡️ الفرق بين الـ Continuous Delivery والـ Continuous Deployment:

  • الـ Continuous Delivery: الكود بيكون جاهز للنشر، بس مش بالضرورة بيتنشر أوتوماتيك. فيه حد من الفريق ممكن يبص عليه ويتأكد يدوي قبل النشر.

  • الـ Continuous Deployment: أي تغيير بيعدي كل الاختبارات بيتنشر فورًا للمستخدمين بشكل تلقائي.


📌 طيب ليه نستخدم CI/CD؟

» كل تغيير بيتعمل عليه اختبارات بشكل مستمر، فأي مشاكل بتتصلح بسرعة. ده بيخلينا نقدر نضيف مميزات جديدة للمشروع بشكل أسرع بكتير.

» بما إن كل حاجة بتتعمل عليها اختبارات أوتوماتيك، فالمشاكل الكبيرة اللي ممكن تحصل لما ندمج أكتر من كود مع بعض بتقل بنسبة كبيرة جدًا.

» لما التحديثات بتوصل للمستخدمين أول بأول، بيحسوا إن التطبيق بيتطور بسرعة وبيحصلوا على مميزات جديدة من غير ما يستنوا شهور.


📍 فيه أدوات كتير بنستخدمها عشان نحقق CI/CD زي:

  • Jenkins

  • GitLab CI

  • CircleCI

  • Travis CI

دول أشهر الأدوات اللي بتساعدنا نبني الـ Pipelines اللي بتخلينا ننفذ الـ CI/CD بكل سهولة.


بالتوفيق يا بطل 🔥