محتويات الدورة

GitHub Actions / الأحداث والتنفيذ وحدود البيانات / الدرس 6

المخرجات وملفات البيئة ونواتج الملفات

اختر قناة البيانات المناسبة واحفظ هوية المنتج عند كل حد.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ربط مخرج الخطوة بمخرج المهمة وneeds.
  • تمييز البيانات القصيرة والملفات والذاكرة المخبأة.

اختر القناة حسب النطاق

يبقى متغير الصدفة ضمن عمليته. يتيح GITHUB_ENV قيمة بيئة للخطوات اللاحقة في المهمة نفسها، بينما يعلن GITHUB_OUTPUT مخرجات خطوة يمكن ربطها بمخرجات المهمة. تنقل النواتج ملفات محفوظة بين المهام أو إلى ما بعد التشغيل، وتسرع ذاكرة الاعتمادات محتوى قابلاً لإعادة الاستخدام بقواعد ثقة واحتفاظ مختلفة. يناسب اسم مرشح Parcel مخرجاً قصيراً، بينما تنتمي الحزمة إلى تخزين نواتج أو إصدارات. لا تضغط تقريراً كبيراً داخل قيمة قصيرة لمجرد تجنب اختيار قناة ملفات مناسبة؛ فالنطاق والحجم ودورة الحياة جزء من القرار.

اكتب عبر الملف المقدم

تحتاج الخطوة id إذا أشارت تعبيرات لاحقة إلى مخرجاتها. يكتب المقطع candidate في GITHUB_OUTPUT، ويربطه بمخرج مهمة، ثم يستهلكه عبر needs في مهمة أخرى. يفتقد المثال الحدث وغلاف سير العمل ولا يُنفذ هنا. القيمة اسم افتراضي، وليست هوية حزمة تحققنا من بايتاتها. ينبغي في الواقع اشتقاق المخرج من المرشح المنتج فعلاً والتحقق منه قبل تأثيره في قرار مميز. مجرد نجاح الربط بين الخطوة والمهمة لا يثبت أن الاسم يخص الحزمة المقصودة أو أن صاحبها مخول للإصدار.

yaml ربط الخطوة بالمهمة وneeds
jobs:
  identify:
    runs-on: ubuntu-latest
    outputs:
      candidate: ${{ steps.label.outputs.candidate }}
    steps:
      - id: label
        run: printf "%s\n" "candidate=parcel-lab-r3" >> "$GITHUB_OUTPUT"
  report:
    needs: identify
    runs-on: ubuntu-latest
    steps:
      - env:
          PARCEL_CANDIDATE: ${{ needs.identify.outputs.candidate }}
        run: printf "%s\n" "$PARCEL_CANDIDATE"

توفر GitHub مسار ملف مخرجات خاصاً للخطوة. يفترض المثال صدفة مناسبة ولا ينشئ حزمة أو يوثق أصلها أو يشغّل سيراً.

احترم حدود النص والأسطر

ملفات البيئة نصوص UTF-8 ذات صياغة موثقة. يسهل تمثيل القيمة أحادية السطر، بينما يحتاج النص متعدد الأسطر إلى صيغة الفاصل المدعومة مع فاصل لا يمكن أن يظهر في المحتوى، أو إلى ملف ناتج عندما تكون البيانات اعتباطية. لا تلحق نص مساهم كما لو كان سجل key=value موثوقاً، فقد يضيف تعيينات أو يفسد البنية. يختلف سلوك ترميز PowerShell حسب الإصدار المختار، لذلك اتبع نمطه الموثق ولا تفترض أن كل إعادة توجيه تنتج البايتات نفسها. يحمي وضوح الصيغة المستهلك من تفسير نص حر كتحكم.

تحتاج الملفات اختياراً واحتفاظاً

يحفظ رفع مسار الملفات المختارة بهوية ناتج وفق نسخة الإجراء وقواعد احتفاظ المنصة. يجب أن تنزّل المهمة اللاحقة الناتج المقصود صراحة؛ لا تنقل needs البايتات وحدها. استخدم أسماء مميزة للمصفوفة وراجع سلوك الملفات المخفية والأذونات والأرشفة والاستبدال في مرجع الإجراء المختار. وسوم الإصدارات الرئيسية في الأمثلة التعليمية متغيرة، بينما يحتاج التشغيل اعتماداً ثابت الهوية مراجعاً وعملية تحديث. لا تختلق الدورة تثبيتات التزام ولا تدعي تجربة رفع مستضاف. تبقى دقة اختيار الملفات وهوية منتجها أهم من ظهور زر تنزيل ناجح.

حلّل سجلاً محدوداً عمداً

يحلل النموذج المحلي الكامل سجلين موثوقين أحاديي السطر ويرفض المفاتيح المكررة. لا يحل محل محلل ملفات البيئة في GitHub ولا يدعم الصيغة متعددة الأسطر. يجعل القيد العقد صريحاً: لا أسطر جديدة داخل القيم، والمفاتيح معروفة، ولا يُقبل التكرار بصمت. يجب أن يتحقق المستهلك الفعلي من الحقول والأنواع المتوقعة أيضاً. لا تعتبر وجود مخرج لاحق دليلاً على صلاحية المرشح أو تفويضه؛ فالبرنامج يوضح معالجة نص محدود في الذاكرة، ولا يصادق هوية منتج أو يثبت علاقة إصدار موثوقة.

python محلل بيانات افتراضي مقيد
text = "candidate=parcel-lab-r3\nformat=plain\n"
result = {}
for line in text.splitlines():
    key, value = line.split("=", 1)
    if key in result:
        raise ValueError("duplicate key")
    result[key] = value
print(result["candidate"])
print(sorted(result))
الناتج المتوقع
parcel-lab-r3
['candidate', 'format']

يعالج الصيغة المعلنة الموثوقة فقط دون ملفات، ولا يحلل كل تمثيل قانوني لملفات بيئة GitHub.

الأخطاء الشائعة وإصلاحها

تتوقع الخطوة قيمة GITHUB_ENV فوراً.

لماذا يحدث؟
يحدّث الملف التالي لا العملية الحالية.
كيف تصلحه؟
استخدم المحلي الآن والملف للتالي.
كيف تتجنب تكراره؟
وثق توقيت النقل ونطاقه.

لا تجد needs ملف package.zip.

لماذا يحدث؟
اختلط اعتماد قصير بنقل ملف.
كيف تصلحه؟
ارفع ونزّل الناتج المحدد صراحة.
كيف تتجنب تكراره؟
راجع المنتج والاسم والمسار والاحتفاظ.

ينشئ نص متعدد تعيينات إضافية.

لماذا يحدث؟
أُلحق غير الموثوق دون عقد آمن.
كيف تصلحه؟
استخدم ترميزاً محدوداً مدعوماً أو ملفاً للنص الحر.
كيف تتجنب تكراره؟
تحقق من المفاتيح ولا تجعل النص سجل تحكم.

اختبر فهمك

1. ما قناة تقرير ميغابايت واسم مرشح قصير؟

اعرض الحل المشروح

احفظ التقرير ملفاً بنطاق وصول واحتفاظ مناسبين ومرر الاسم المتحقق بمخرج خطوة ومهمة. اربط الاثنين حتى لا يسمي الاسم تقريراً أو حزمة أخرى.

2. تنتج المصفوفة ثلاث حزم. هل تشترك بمخرج واحد؟

اعرض الحل المشروح

تجنب اعتماد ترتيب النهاية لاختيار القيمة. سمّ كل حزمة واجمع بيان التركيبات المتوقع صراحة. تحقق من الغائب والفاشل قبل قرار الإصدار.

أهم ما تعلمته

  • اختر القناة بالنطاق والحجم والدورة.
  • لا يوثق الربط المرشح الذي يسميه.

المراجع الرسمية