سير العمل القابلة لإعادة الاستخدام والإجراءات المركّبة
سير العمل القابلة لإعادة الاستخدام والإجراءات المركّبة
مع نمو المنصة، تتكرر نفس أنماط CI/CD عبر عشرات المستودعات: الفحص، الاختبار، بناء صورة Docker، الرفع إلى السجل، والنشر على بيئة التجربة. نسخ ملفات YAML للسير العمل هو أسرع طريق إلى فوضى يصعب صيانتها — فتطبيق تصحيح أمني أو ترقية Runner يستلزم التعديل في 40 مكانًا. يوفر GitHub Actions آليتين متكاملتين للخروج من هذه الدوامة: سير العمل القابلة لإعادة الاستخدام والإجراءات المركّبة. معرفة أي أداة تناسب أي مشكلة، وكيفية إصدار الاثنتين بشكل صحيح، هو ما يميز منصة CI احترافية عن مجموعة من ملفات YAML المتكررة.
سير العمل القابلة لإعادة الاستخدام — workflow_call
سير العمل القابل لإعادة الاستخدام هو ملف سير عمل عادي يُعلن on: workflow_call بوصفه أحد مُشغّلاته. يمكن لأي سير عمل آخر استدعاؤه كأنه مهمة واحدة — ينفّذ الملف المستدعى بعزلة كاملة مع مهامه ورنّراته وبيئاته الخاصة. هذه هي الأداة الصحيحة عندما تريد مشاركة مراحل خط أنابيب كاملة تشمل منطق تعدد المهام وبوابات البيئة وبيانات OIDC.
تدعم سير العمل القابلة لإعادة الاستخدام مُدخلات مكتوبة (نص، منطقي، رقمي، اختيار) وأسرارًا تُمرَّر، ويمكنها إصدار مخرجات يستهلكها المُستدعي. تُعلن المُدخلات تحت on.workflow_call.inputs، والأسرار تحت on.workflow_call.secrets.
يستدعي مُستدعٍ في أي مستودع داخل المنظمة هذا السير عمل باستخدام مفتاح uses على مستوى المهمة — وليس مستوى الخطوة:
uses على مستوى المهمة ثلاثة أشكال للمرجع: org/repo/.github/workflows/file.yml@ref للمستودعات المتقاطعة، و./.github/workflows/file.yml للمستودع ذاته (بدون @ref)، ومستودع org/.github الخاص كمخزن مشترك على مستوى المنظمة. دائمًا اربط استدعاءات المستودعات المتقاطعة بوسم أو SHA — لا تستخدم فرعًا متغيرًا مثل @main في الإنتاج؛ فأي تغيير كاسر سيُصيب جميع المُستدعين فورًا.الإجراءات المركّبة
الإجراء المركّب هو تسلسل خطوات قابل لإعادة الاستخدام مُعبَّأ في ملف action.yml. على خلاف سير العمل القابلة لإعادة الاستخدام، تعمل الإجراءات المركّبة كـخطوات داخل مهمة قائمة — تشترك في الرنّر ومساحة العمل وجميع متغيرات البيئة الخاصة بالمهمة المُستدعِية. هذا يجعلها التجريد الصحيح لتغليف تسلسل خطوات قابل للتكرار (تثبيت التبعيات، تهيئة أداة، تشغيل فاحص) دون تكلفة مهمة منفصلة.
أنشئ الإجراء في مستودع تحت أي مسار (بالاصطلاح .github/actions/<name>/action.yml للإجراءات داخل المستودع ذاته، أو الجذر action.yml لمستودع إجراء مستقل).
كل خطوة run داخل الإجراء المركّب يجب أن تُعلن shell — لا يستطيع GitHub استنتاجها من السياق كما يفعل في سير العمل العادي. نسيان هذا هو الخطأ الأكثر شيوعًا عند كتابة الإجراءات.
معمارية — متى تستخدم أيًا منهما
معايير المنظمة الشاملة مع مستودع سير عمل مركزي
تُخزّن المنظمات الهندسية الكبيرة جميع سير العمل القابلة لإعادة الاستخدام والإجراءات المركّبة الرسمية في مستودع مشترك واحد — بالاصطلاح يُسمى .github تحت المنظمة (مثال: my-org/.github). يمنح GitHub هذا المستودع قوتين خاصتين: مجلد .github/workflows/ هو مسار البحث الافتراضي لمراجع workflow_call بالشكل المختصر، ومجلد workflow-templates/ يملأ واجهة "Actions" لإنشاء سير عمل جديد لكل مستودع في المنظمة.
اقرن المستودع المشترك بـسير العمل المطلوبة (يُهيَّأ في إعدادات المنظمة ← Actions ← Required workflows). يعمل سير العمل المطلوب على كل طلب سحب في كل مستودع في المنظمة — بغض النظر عما تفعله CI الخاصة بالمستودع. هكذا تُطبّق فرق المنصة عمليات الفحص الأمني وفحص الترخيص أو توليد SBOM دون مطالبة كل فريق تطوير بالاشتراك يدويًا.
v1، v1.2، v1.2.3). يربط المُستدعون بـ@v1 (وسم خفيف تحركه للأمام مع إصدارات الترقيع)، مما يمنحك إمكانية دفع تحسينات غير كاسرة دون أن يحتاج المُستدعون لتحديث ملفات YAML الخاصة بهم. قدّم التغييرات الكاسرة تحت @v2 وحافظ على الاثنين بالتوازي خلال فترة ترحيل — نفس النموذج الذي يستخدمه actions/checkout وactions/setup-node.أشكال الفشل الشائعة
- غياب
shellفي خطواتrunالمركّبة — يفشل الإجراء برسالة خطأ غامضة. كل خطوةrunداخلruns.using: compositeتحتاجshell: bash(أوpwshأوpythonإلخ). - تمرير الأسرار كمُدخلات للإجراءات المركّبة — الأسرار تُورث تلقائيًا؛ تمريرها كمُدخلات يعرّض قيمها في سجل ملخص سير العمل. مرّر الأسرار فقط إلى سير العمل القابلة لإعادة الاستخدام عبر
on.workflow_call.secrets. - الاستدعاء الدائري — سير عمل قابل لإعادة الاستخدام يستدعي نفسه (مباشرةً أو عبر سلسلة) هو خطأ صارم. يكتشف GitHub الحلقات ويمنعها حتى ثلاثة مستويات عمق.
- حد العمق — يمكن تداخل سير العمل القابلة لإعادة الاستخدام حتى أربعة مستويات عمق. الوصول إلى هذا الحد عادةً ما يشير إلى أن التجريد دقيق جدًا؛ قم بدمجه.
- مرجع متغير في استدعاء مستودع متقاطع —
@mainعلى المُستدعي يعني أن أي دفع قسري أو إيداع عرضي في المستودع المشترك يُصيب جميع المُستدعين فورًا. استخدم دائمًا وسمًا أو SHA.