GitHub Actions / الهوية والتنسيق والحوكمة / الدرس 17
التشخيص والمهل وقرارات الإعادة الآمنة
حدد أول حد فاشل واحفظ الدليل دون كشف البيئة.
في هذه الصفحة
أهداف الدرس
- تمييز الطابور والتهيئة والتنفيذ والتقرير والهدف.
- حساب إعادة محدودة وحفظ النتائج الأصلية.
ابحث عن أول عقد غير مستوفى
قد يفشل السير قبل بدء النص أو أثناء التهيئة أو التأكيد أو نقل ناتج أو بعد قبول هدف خارجي للعمل. احفظ هوية التشغيل والمحاولة والمراجعة والمهمة والخطوة وأول رسالة ذات صلة. قد تكون الأخطاء اللاحقة نتائج: يتعذر رفع تقرير لأن الاختبار لم ينتجه، أو يفشل التنظيف بعد الاستثناء الأصلي. ابدأ بأول حد ذي معنى لا بآخر سطر أحمر. عند نقص السجل أبق المجهول صريحاً ولا تستنتج حالة هدف من غياب رسالة نجاح. يوفر ترتيب الوقائع أساساً لتغيير واحد يمكن تقييم أثره.
اجمع دليلاً محدوداً قبل زيادة التفصيل
غالباً تكفي السجلات العادية والنتائج وتوقيت الخطوات وبيانات المشغّل وإصدارات أدوات مختارة لتحديد المشكلة. تدعم GitHub تشخيص المشغّل والخطوات بضوابط موثقة، لكن تفعيلها عملية مستودع تحتاج سلطة مناسبة ولا تنفذها الدورة. قد تكشف الزيادة مسارات ووسائط وأسراراً محولة وتخلق ضجيجاً مكلفاً. اجمع ما تتطلبه الفرضية فقط ونقح قبل المشاركة واحفظ حالة الإخفاق الأصلي مستقلة عن نجاح تصدير التشخيص. لا تجعل رفع السجل الناجح بديلاً عن نتيجة العملية التي كان يفترض أن يشرحها.
حدد ميزانية المرحلة القابلة للتعليق
تحد مهلة المهمة تنفيذ العامل وفق قواعد المنصة، ولا تصلح مشغّلاً مفقوداً ولا تضمن إلغاء عمل خارجي. تقيد حدود المنصة عمر التشغيل والانتظار والمصفوفات والتخزين والتزامن وقد تتغير. راجع حدود الخطة ونوع العامل الفعليين بدلاً من نسخ سقوف رقمية لمنطق التطبيق. امنح العمليات الطويلة سلوكاً محدوداً واترك وقتاً للأدلة. تحتاج مهمة ملغاة ذات اكتمال هدف مجهول ملاحظة قبل الإعادة. يوضح المقطع المهلة وشرط تشخيص فقط، ولا يقيس استجابة الإلغاء أو يثبت حفظ أي ملف تقرير.
timeout-minutes: 8
steps:
- name: Run fixture check
run: python check_fixture.py
- name: Retain failure context
if: ${{ failure() }}
run: printf "%s\n" "fixture check failed; preserve bounded diagnostics"
النص اعتماد تجهيز مفترض لا يوفره المقطع. تطبع الأخيرة سياقاً ولا تحفظ ناتجاً. لا تعمل مهمة ولا تقاس مهلة، ولا تعني failure() تنفيذ الخطوة في كل إلغاء.
أعد وحدة معروفة السلامة
قد يبرر خطأ حصول عابر إعادة محدودة إذا كانت العملية آمنة التكرار. يحتاج التأكيد الحتمي أو الملف المفقود أو YAML غير الصالح تصحيحاً غالباً. احفظ المحاولات كلها لا النجاح الأخير فقط. يحسب النموذج المحلي الكامل أسوأ ميزانية معلنة دون نوم. يستثني الطابور والبدء وتأخر الإلغاء فلا يقدم ضماناً تشغيلياً. قد تكرر إعادة المهمة كلها آثاراً مكتملة؛ حدد أصغر وحدة ناقصة أولاً. يوضح الحساب كلفة سياسة الإعادة قبل تطبيقها، لكنه لا يحدد تلقائياً نوع الإخفاق الذي يجوز تكراره.
attempt_limit = 3
per_attempt_seconds = 15
waits = [2, 5]
assert len(waits) == attempt_limit - 1
print(attempt_limit * per_attempt_seconds + sum(waits))
print("no waiting or external operation performed")
52
no waiting or external operation performed
ثلاث محاولات بخمس عشرة ثانية وانتظار سبع تساوي اثنتين وخمسين في النموذج. يجري البرنامج حساباً فقط ولا ينام أو يتصل بخدمة.
طابق النتيجة بالحالة الخارجية
إن نجح التقديم وانتهت مهلة التحقق فافحص عملية الهدف الأصلية عبر مسار المالك المعتمد. إن فشل التقرير وحده فأعد نشره الآمن لا تبني الحزمة. تنشئ الإعادة محاولة جديدة وقد تتفاعل مع الاحتفاظ والأذونات واعتمادات متغيرة، فقارن المدخلات الفعلية. بعد الإصلاح تحقق من العقد الأصلي على مراجعة مكافئة واحفظ التفسير. ينبغي أن تصبح الإعادات الخضراء المتكررة بلا تفسير مشكلة موثوقية مملوكة، لا طريقة التشخيص المعتادة. يحافظ السجل الجيد على الفرق بين طلب قُبل ونتيجة مستخدم استعيدت وتقرير اكتمل نشره.
الأخطاء الشائعة وإصلاحها
يُعد آخر سطر سبباً جذرياً.
- لماذا يحدث؟
- حجب التنظيف أو التقرير أول إخفاق.
- كيف تصلحه؟
- احفظ الزمن وافحص الحد الأول ذي المعنى.
- كيف تتجنب تكراره؟
- افصل التطبيق والبنية والتقرير.
تُزاد المهلة لمهمة لا تبدأ.
- لماذا يحدث؟
- اختلط الانتظار أو المشغّل بمدة التنفيذ.
- كيف تصلحه؟
- افحص الإنشاء والاعتماد والموافقة والوسم والسعة.
- كيف تتجنب تكراره؟
- قس الانتظار والتنفيذ منفصلين.
تعاد المهمة كلها بعد مهلة هدف.
- لماذا يحدث؟
- تضم الإعادة عملية خارجية غامضة.
- كيف تصلحه؟
- لاحظ الأصل واستأنف الناقص الآمن فقط.
- كيف تتجنب تكراره؟
- حدد الهوية وقابلية التكرار قبل الإعادة.
اختبر فهمك
1. فشل الاختبار ثم التقرير. أيهما أولاً؟
اعرض الحل المشروح
حقق إخفاق الاختبار كعقد أصلي واحفظ عيب التقرير مستقلاً. يحسن إصلاح النشر الدليل ولا ينجح الاختبار. لا تستبدل النتيجتين بتسمية بنية عامة.
2. هل اثنتان وخمسون ثانية زمن CI الكامل؟
اعرض الحل المشروح
لا. هو نموذج تنفيذ وانتظار معلنين فقط. يضاف الطابور والتهيئة والنقل والتنظيف والإلغاء. اذكر الاستثناءات وقس المراحل قبل وعد تغذية راجعة.
أهم ما تعلمته
- شخّص الحد الأول واحفظ المحاولات.
- تحتاج المهلة والإعادة نطاقاً وفهماً لحالة الخارج.