فشل النشر
شخّص أكثر أسباب فشل نشر التطبيقات وفشل بدء التشغيل في بيئة التشغيل شيوعاً.
كيف تجري عملية النشر
النشر (Deployment) يُدار عبر GitHub Actions، لا عبر زرّ في البوابة. عند الرفع إلى
الفرع المُعتمَد للنشر، يبني سير العمل حزمة Docker، ويرفعها إلى مستودعك الخاص على
alawadi.cloud عبر OIDC، ثم ينشرها على التطبيق الهدف. تتابع النتيجة في قائمة
النشرات الأخيرة (Recent deployments) الخاصة بالتطبيق وفي سجلّاته. تظهر كل
عملية نشر بإحدى الحالات: queued أو running أو succeeded أو failed. راجع
النشر عبر GitHub Actions لمعرفة المسار كاملاً.
عند فشل النشر، يكون السبب غالباً واحداً ممّا يلي.
قائمة فحص فشل النشر
تفويض النشر غير مُعدّ. الرفع إلى مستودعك وحده لا ينشر التطبيق؛ فالتطبيق الهدف
يحتاج تفويض نشر عبر GitHub Actions. في صفحة التطبيق ضمن المشروع (المشاريع ← مشروعك
← التطبيق)، وضمن بطاقة النشر المستمر (GitHub Actions)، تأكّد أنّ مستودع
GitHub ومرجع الفرع (Branch ref) اللذين ضبطتهما يطابقان المستودع والفرع
اللذين يعمل منهما سير العمل (يجب أن يبدأ المرجع بـ refs/، مثل refs/heads/main).
وإذا حدّدت بيئة (Environment)، فيجب أن تستخدم مهمّة سير العمل البيئة نفسها. أي
عدم تطابق يُرجِع خطأ تفويض نشر برمز 403، ولا تُسجَّل أي عملية نشر.
الحزمة ليست من مستودعك. يجب أن تأتي الحِزم المنشورة من
registry.alawadi.cloud/... وأن تنتمي إلى مستودع يملكه حسابك. تُرفض الحِزم
العامّة الاعتباطية (مثل nginx:1.27 من Docker Hub) برمز 400 BAD_IMAGE.
وسم حزمة قابل للتغيير. تُرفض الوسوم :latest والحِزم بلا وسم برمز
400 BAD_IMAGE. ثبّت الوسم على معرّف الـ commit (...:${{ github.sha }}) أو على
بصمة @sha256:.... سير العمل المُولَّد يفعل ذلك تلقائياً؛ راجع
قواعد حزمة Docker.
التطبيق لا يستمع على المنفذ 8080. المنصّة توجّه دائماً إلى المنفذ 8080.
اربط على 0.0.0.0 واقرأ متغيّر البيئة PORT (قيمته مضبوطة على 8080). أي تطبيق
يتوقّف فور تشغيله أو لا يربط المنفذ سيظهر غير سليم بعد إتمام النشر.
الحزمة تعمل بصلاحيات root. تمنع سياسة Pod Security المُقيَّدة تشغيل الحِزم
بصلاحيات root. يجب أن يضيف ملف Dockerfile مستخدماً غير مميّز ويفعّله عبر USER،
وهذا ما يفعله أصلاً
ملف Dockerfile المساعد الذي تولّده
البوابة.
حصص الموارد. تُرفض قيم CPU أو الذاكرة أو القرص الخارجة عن المدى المسموح برمز
400 BAD_RESOURCES. راجع الموارد المحجوزة في نافذة تعديل التطبيق مقابل
الحدود.
الرصيد غير كافٍ. يتطلّب إنشاء تطبيق أو قاعدة بيانات رصيداً موجباً. وحين يكون
رصيدك صفراً أو سالباً، يُرفض الطلب برمز 402 INSUFFICIENT_BALANCE. استبدل
قسيمة لشحن رصيدك، ثم أعد المحاولة. وقد يُرجِع الحساب
الجديد تماماً رمز 402 ACCOUNT_NOT_INITIALIZED لوهلة قصيرة ريثما تُجهَّز الفوترة؛
انتظر قليلاً ثم أعد المحاولة.
الحساب معلَّق. الحساب الذي نفد رصيده يُعلَّق ولا يمكنه تجهيز موارد جديدة،
ويُرجِع الطلب رمز 403 ACCOUNT_SUSPENDED. استبدل قسيمة
لاستعادة رصيد موجب ورفع التعليق.
راجع السجلّات الأخيرة في صفحة تفاصيل التطبيق (بطاقة السجلّات؛ فعّل
المتابعة للبثّ المباشر) وقائمة النشرات الأخيرة لقراءة رسالة الخطأ. تُرفَض
الحزمة أو المنفذ أو مخالفة سياسة بيئة التشغيل برمز 400 (مثل BAD_IMAGE أو
BAD_RESOURCES)؛ راجع رموز الأخطاء.
أعد تشغيل التطبيق بعد أي تعديل على متغيّرات البيئة كي تُطبَّق القيم الجديدة.
إذا تكرّر الخطأ نفسه، افتح تذكرة دعم واربط المشروع أو التطبيق المتأثّر. أرفق وقت عملية النشر ونص رسالة الخطأ الظاهرة.
الحزمة السابقة تبقى قيد التشغيل
النشر الفاشل لا يستبدل آخر حزمة سليمة، فيبقى تطبيقك يخدم الزوار كالمعتاد ريثما تعالج المشكلة.