يفرض Cloud Run منفذ الاستماع: فهو يحقن المتغير PORT (8080 افتراضيًا) ومسبار
الإقلاع TCP الخاص به ينتظر استماعًا على هذا المنفذ. استبدلت إعادة كتابة سلمى process.env.PORT بـ
app.listen(3000): العملية تقلع فعلًا («port 3000» في السجلات)، لكن لا شيء يستمع
على 8080، فيفشل المسبار ولا تصبح المراجعة جاهزة أبدًا.
الصورة موجودة (Artifact Registry)، ومشكلة صلاحيات على الصورة كانت ستعطي خطأ تنزيل، وإطالة المهلة لن تغيّر شيئًا: المسبار ينتظر 240 ثانية منفذًا لن يفتحه أحد. وفي الأثناء، تواصل المراجعة القديمة الخدمة: لا يحوّل Cloud Run حركة المرور إلا نحو مراجعة جاهزة.
تمّ حلّ الحادث
التحليل والإصلاح
الإصلاح: قراءة المنفذ من البيئة في server.js
(const port = Number(process.env.PORT) || 8080; app.listen(port))، ثم إعادة النشر
(gcloud run deploy api-commandes --source .). وكحل إسعافي، يعمل --port=3000 أيضًا:
إذ يحقن Cloud Run حينها PORT=3000.
حتى لا يتكرر ذلك:
- قاعدة للفريق: المنفذ يأتي دائمًا من
$PORT(12-factor)، وليس أبدًا بشكل ثابت؛ - اختبار الصورة كما يشغّلها Cloud Run:
docker run -e PORT=8080 -p 8080:8080 …ثمcurl؛ - مرحلة في CI تشغّل الحاوية بمنفذ عشوائي وتتحقق من
/sante؛ - قراءة سجلات المراجعة قبل لمس المهل أو الموارد.