بناء CI/CD Pipeline على غيمة
1. GitHub Actions Workflow
تم إنشاء GitHub Actions Workflow لأتمتة عملية بناء واختبار ونشر التطبيق على منصة Ghaymah Cloud.
يتم تشغيل الـ Workflow عند عمل push على فرعي main أو develop.
الخطوات الأساسية هي:
- تحميل الكود من GitHub.
- بناء Docker Image باستخدام
Dockerfile. - تشغيل Container بشكل مؤقت واختبار
/healthللتأكد من أن التطبيق يعمل. - نشر التطبيق على بيئة Staging عند استخدام فرع
develop. - نشر التطبيق على Production عند استخدام فرع
mainبعد الحصول على موافقة يدوية.
يتم تخزين بيانات تسجيل الدخول الخاصة بـ Ghaymah داخل GitHub Secrets باستخدام:
GHAYMAH_EMAILGHAYMAH_PW
2. Manual Approval قبل Production
تم استخدام GitHub Environment باسم production لإضافة مرحلة موافقة يدوية قبل النشر.
عند وصول الكود إلى فرع main، يتم تنفيذ عملية البناء والاختبار أولاً، ثم يتوقف الـ Workflow وينتظر موافقة الشخص المسؤول.
بعد الموافقة فقط يتم تنفيذ عملية النشر على Production باستخدام Ghaymah CLI.
هذا يمنع نشر أي إصدار جديد على Production بشكل تلقائي دون مراجعة.
3. الفرق بين Staging و Production
Staging
بيئة تستخدم لاختبار التطبيق قبل نشره للمستخدمين الحقيقيين.
يتم نشر التغييرات عليها بشكل تلقائي من فرع develop، ويمكن استخدامها للتأكد من أن التطبيق يعمل بشكل صحيح.
Production
هي البيئة التي يستخدمها المستخدمون الحقيقيون.
يتم النشر إليها من فرع main، ويتم وضع Manual Approval قبل عملية النشر لتقليل احتمالية نشر إصدار يحتوي على أخطاء.
الـ Workflow يكون كالتالي:
develop → Build & Test → Staging
main → Build & Test → Manual Approval → Production
4. الربط مع Ghaymah CLI
يتم تثبيت Ghaymah CLI داخل GitHub Actions Runner باستخدام الأمر:
curl -sSL https://cli.ghaymah.systems/install.sh | bash
بعد ذلك يتم تسجيل الدخول باستخدام بيانات Ghaymah المخزنة في GitHub Secrets:
gy auth login
ثم يتم تنفيذ عملية النشر باستخدام:
gy resource app launch
يستخدم Ghaymah CLI ملف .ghaymah.json الموجود في جذر المشروع لمعرفة إعدادات التطبيق، مثل:
- اسم التطبيق.
- Project ID.
- الـ Port المستخدم.
- اسم Dockerfile.
- إعدادات الوصول العام.
وبذلك يصبح GitHub Actions مسؤولاً عن أتمتة عملية CI/CD، بينما يقوم Ghaymah CLI بتنفيذ عملية النشر على منصة Ghaymah Cloud.