GitHub Actions / الأحداث والتنفيذ وحدود البيانات / الدرس 4
المشغّلات والصدفات ومجلدات العمل
صرّح بافتراضات التنفيذ بدلاً من الاتكال على وسم مألوف.
في هذه الصفحة
أهداف الدرس
- فصل وسم المشغّل عن هوية الأدوات.
- مراجعة الصدفة والملفات لمهمة قابلة للنقل.
يختار runs-on سعة التنفيذ
تختار قيمة runs-on سعة تشغيل مؤهلة، وقد تكون مستضافة لدى GitHub أو ذاتية الاستضافة وفق سياسة المستودع والمؤسسة. تصف الوسوم خصائص توجيه، ولا تثبت وحدها الثقة أو ثبات الصورة أو توفر عامل. قد تبقى مهمة صحيحة النص في الطابور لأن أي مشغّل مسموح لا يطابق طلبها. تستخدم أمثلة Parcel الوسوم المستضافة للتوضيح فقط. لا تضف وسم مشغّل ذاتي كاختصار لتجاوز الانتظار قبل مراجعة شبكته وهوياته وحالته المستمرة وسياسة الوصول إليه، لأن ذلك قد ينقل المهمة إلى حدود ثقة مختلفة تماماً.
ليست الصورة ملف قفل
تتغير محتويات صور المشغّلات المستضافة ووسوم latest بمرور الوقت. سجّل إصدار الصورة والأدوات المؤثرة للتشخيص، وأنشئ سلسلة أدوات التطبيق صراحة عبر إعداد مراجع عند الحاجة. حتى وسم نظام تشغيل محدد لا يثبت كل حزمة مثبتة إلى الأبد. أعلن مدخلات البناء وتجنب الاعتماد على أداة عرضية وُجدت على عامل واحد. إذا احتاجت المهمة ملفاً تنفيذياً بعينه فاجعل وجوده وإصداره جزءاً من عقد الإعداد، بدلاً من نسخ جلسة طرفية محلية ناجحة إلى YAML وافتراض أن بيئة المشغّل ستطابق جهاز المطور.
اختر المفسر عمداً
تعتمد الصدفة الافتراضية وغلاف الأمر على المنصة والإعداد. لا تعمل صياغة Bash تلقائياً في PowerShell، وقد تختلف قواعد انتقال الأخطاء بينهما. حدّد shell عندما تكون دلالاته مؤثرة، وافهم طريقة استدعاء المشغّل له. ينطبق افتراضي working-directory على خطوات run المدعومة، ولا يغير مدخلات المسار الخاصة بكل إجراء uses. يختار المقطع التالي Bash ومجلداً نسبياً صريحاً، ويفترض وجود المجلد ونص التجهيز بعد خطوة سحب أو توليد منفصلة. غياب هذه المتطلبات لا يُعالج بمجرد إعلان الصدفة والمجلد.
defaults:
run:
shell: bash
working-directory: fixture
steps:
- name: Check fixture
run: python check_fixture.py
جزء مهمة ناقص غير قابل للتشغيل. لا ينشئ fixture/check_fixture.py ولا يختار Python ولا يسحب المصدر. المتطلبات الغائبة معلنة لا مخفية بادعاء نجاح.
ابن المسار حسب المنصة
تجعل فواصل المسار الثابتة وافتراضات حالة الأحرف ومسارات المنزل المطلقة المهام هشة بين الأنظمة والسياقات. استخدم مسارات مساحة العمل المعلنة أو عمليات بناء المسار في اللغة. يميز نظام ملفات Linux عادة App.py من app.py، بينما قد يختلف السلوك في نظام آخر. لا تحول مسار منزل مطور إلى عقد CI. يبني البرنامج الكامل مسار تجهيز من مكونات معلنة دون لمس مستودع أو الاعتماد على فاصل المضيف الفعلي. وبما أنه يستخدم كائنات Pure، فهو يشرح تمثيل المسار ولا يثبت وجود الملف.
from pathlib import PurePosixPath, PureWindowsPath
parts = ("fixture", "reports", "result.json")
print(PurePosixPath(*parts))
print(PureWindowsPath(*parts).as_posix())
fixture/reports/result.json
fixture/reports/result.json
يستخدم السطران مساراً منطقياً صريحاً. لا تصل كائنات Pure إلى الملفات ولا تثبت وجودها. يعرض as_posix مسار Windows بفواصل أمامية للمقارنة عمداً.
شخّص بأدلة بيئة محدودة
إذا اختلفت المهمة عن السلوك المحلي فاجمع فئة المشغّل وإصدارات الأدوات ذات الصلة والصدفة ومجلد العمل والعملية الفاشلة بدقة. لا تطبع البيئة كلها ولا تؤرشف مجلدات المضيف تكرارياً، فقد تتضمن أسراراً وبيانات غير مرتبطة. ميّز غياب التنفيذي والمجلد الخطأ ورفض الإذن وتعارض المعمارية والانتظار. تغيير العامل والمفسر والاعتمادات والأذونات معاً يزيل وضوح التشخيص. أصلح أصغر افتراض خاطئ، ثم احفظ دليلاً يكفي لتأكيد أن المراجعة نفسها أصبحت تستوفي العقد المقصود، لا أنها نجحت مصادفة في بيئة مختلفة.
الأخطاء الشائعة وإصلاحها
يعمل النص في Bash ويفشل على Windows.
- لماذا يحدث؟
- يعتمد صياغة Bash مع صدفة مختلفة.
- كيف تصلحه؟
- اختر صدفة متاحة مقصودة أو اكتب للمفسر الفعلي.
- كيف تتجنب تكراره؟
- راجع الصدفة والاقتباس لكل منصة.
تنتظر المهمة وسم self-hosted غريباً دائماً.
- لماذا يحدث؟
- لا يوجد عامل مخول مطابق.
- كيف تصلحه؟
- افحص التوجيه والسعة مع المالك.
- كيف تتجنب تكراره؟
- راجع الوسوم والملكية كإعداد.
يقرأ إجراء الإعداد مجلداً خاطئاً.
- لماذا يحدث؟
- افتُرض سريان افتراضي run على مدخل الإجراء.
- كيف تصلحه؟
- اضبط مدخل المسار الموثق منفصلاً.
- كيف تتجنب تكراره؟
- ميّز افتراضات run وعقد uses.
اختبر فهمك
1. هل يضمن ubuntu-latest المترجم نفسه الشهر المقبل؟
اعرض الحل المشروح
لا. البيئة متغيرة والأدوات تتحدث. سجّل الإصدارات وأنشئ أدوات التطبيق صراحة. يحتاج حتى وسم نظام ثابت استراتيجية لمدخلات تؤثر في البايتات.
2. يوجد Report.json محلياً ويطلب Linux report.json. ما الإصلاح؟
اعرض الحل المشروح
طابق الاسم المتتبع والمرجع حسب حالة الأحرف المطلوبة ثم تحقق من المستودع. لا تعالج ذلك بسلطة أكبر؛ تتعلق المشكلة بهوية المسار لا بالوصول بالضرورة.
أهم ما تعلمته
- التوجيه والصورة والصدفة والمسار افتراضات مستقلة.
- اجمع أدلة محدودة قبل تغيير حدود التنفيذ.