تخطَّ إلى المحتوى

upload-artifact / download-artifact

القطع الأثرية (Artifacts) upload-artifact / download-artifact

upload-artifact وdownload-artifact ينقلان ملفات بين jobs مختلفة داخل نفس الـ workflow، أو يحتفظان بها بعد انتهاء التشغيلة للتنزيل اليدوي.

بعكس actions/cache المصمم لتسريع تبعيات متكررة عبر تشغيلات مختلفة، الـ Artifacts مصممة لنقل ملفات من job لآخر داخل نفس التشغيلة — مثل تمرير ناتج البناء (dist/) من job البناء إلى job النشر، لأن كل job في GitHub Actions يعمل على جهاز افتراضي منفصل ولا يشارك ملفات job آخر تلقائياً. الـ job المستقبِل يجب أن يعلن الاعتماد على job المصدر عبر needs، وإلا فقد يحاول تنزيل artifact غير موجود بعد لأن jobs بلا needs تعمل بالتوازي.

retention-days يحدد كم يوماً يبقى الـ artifact متاحاً للتنزيل قبل حذفه تلقائياً (بحد أقصى يفرضه إعداد المستودع أو المؤسسة). يُستخدم هذا أيضاً للاحتفاظ بتقارير الاختبار أو صور فشل الاختبارات البصرية لمراجعتها لاحقاً حتى بعد انتهاء التشغيلة بالكامل.

الصياغة

- uses: actions/upload-artifact@v4
  with:
    name: <اسم القطعة>
    path: <مسار الملفات>

- uses: actions/download-artifact@v4
  with:
    name: <اسم القطعة>

📄 مثال

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: npm ci && npm run build
      - uses: actions/upload-artifact@v4
        with:
          name: dist-files
          path: dist/
          retention-days: 5

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: dist-files
          path: dist/

أهم النقاط

العنصرالوظيفة
nameاسم القطعة، يُستخدم لاحقاً في download-artifact لتحديد أيّها تُنزَّل
pathالملفات أو المجلدات المراد رفعها؛ يدعم مسارات متعددة بفاصل |
retention-daysعدد أيام بقاء القطعة قبل الحذف التلقائي
needsليس جزءاً من الـ artifact نفسه، لكنه إلزامي على الـ job المستقبِل ليضمن ترتيب التنفيذ

💡 نصائح عملية

  • استخدم artifacts لتمرير ناتج بناء ثقيل بين jobs بدل إعادة بنائه في كل job من الصفر
  • احتفظ بتقارير التغطية (coverage) ونتائج الاختبار كـ artifact حتى تراجعها بعد فشل التشغيلة دون إعادة تشغيلها

⚠️ أخطاء شائعة

  • نسيان needs على الـ job المستقبِل يجعله يحاول التنزيل قبل رفع القطعة فعلياً لأن jobs تعمل بالتوازي افتراضياً
  • تخزين أسرار أو بيانات حساسة داخل artifact — أي شخص بصلاحية قراءة على المستودع يمكنه تنزيلها

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DEVOPS الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs