التنفيذ الشرطي واعتماديات المهام
تحكّم في وقت تشغيل الخطوات والمهام باستخدام شروط if والكلمة المفتاحية needs والتعبيرات ودوال التحقق من الحالة في مسارات عمل GitHub Actions
التنفيذ الشرطي واعتماديات المهام درس مجاني في CI/CD with GitHub Actions & DevOps Pipelines على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CI/CD with GitHub Actions & DevOps Pipelines، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CI/CD with GitHub Actions & DevOps Pipelines 4 دروس في المجموع.
لماذا تهم الشروط
لا ينبغي أن تعمل كل خطوة في كل مرة. فقد ترغب في تشغيل خطوة النشر على فرع main فقط، أو تشغيل خطوة الإشعار عندما يفشل شيء ما فقط.
يتيح لك GitHub Actions إرفاق شرط if بأي خطوة أو مهمة للتحكم في تنفيذها.
المفتاح if
أضف مفتاح if: إلى إحدى الخطوات. ولا تعمل الخطوة إلا عندما يُقيَّم التعبير إلى true.
لا تحتاج التعبيرات داخل if إلى الغلاف ${{ }}، مع أنه مسموح به.
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shكائنات السياق
تُقرأ الشروط من كائنات السياق التي تصف عملية التشغيل:
github— الحدث والمرجع والمنفّذ وshaenv— متغيرات البيئةjobوsteps— حالة العمل السابقrunner— نظام التشغيل والمعمارية
على سبيل المثال، يخبرك github.event_name بما إذا كان push أو pull_request قد أطلق عملية التشغيل.
دوال التحقق من الحالة
تُتخطّى الخطوة تلقائيًا إذا فشلت خطوة سابقة. ولتجاوز ذلك، استخدم دوال الحالة:
success()— تكون true إذا لم تفشل أي خطوة سابقة (الإعداد الافتراضي)failure()— تكون true إذا فشلت أي خطوة سابقةalways()— تُشغَّل مهما حدثcancelled()— تكون true إذا أُلغيت عملية التشغيل
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'تشغيل التنظيف دائمًا
من الأنماط الشائعة إضافة خطوة تنظيف يجب تشغيلها حتى إذا فشلت الخطوات السابقة. استخدم if: always().
يضمن ذلك التعامل مع الموارد المؤقتة أو الحاويات أو تقارير الاختبارات بصرف النظر عن النتيجة.
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logsتبعيات المهام باستخدام needs
تجعل الكلمة المفتاحية needs إحدى المهام تنتظر مهام أخرى. ومن دونها، تُشغَّل المهام بالتوازي.
يجب أن تنتهي المهمة المدرجة في needs بنجاح قبل بدء المهمة التابعة لها.
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.shتبعيات متعددة
يمكن لمهمة أن تعتمد على عدة مهام عبر تمرير قائمة إلى needs. وستنتظر اكتمالها جميعًا.
تتيح هذه الطريقة إنشاء أنماط fan-in، بحيث لا تُشغَّل مهمة نهائية إلا بعد نجاح جميع المهام المتوازية.
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'المهام المشروطة
يعمل المفتاح if مع المهام أيضًا، وليس مع الخطوات فقط. ويحدد الشرط على مستوى المهمة ما إذا كانت المهمة بأكملها ستُشغَّل.
هنا تُشغَّل مهمة deploy فقط عند إجراء عمليات push إلى main، مع استمرار اعتمادها على الاختبارات.
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shاستخدام مخرجات المهام
يمكن للمهام تمرير البيانات إلى المهام اللاحقة عبر outputs. وتقرأ المهمة التابعة هذه البيانات من خلال سياق needs.
يتيح ذلك جعل الشرط يعتمد على قيمة حُسبت سابقًا، مثل تحديد ما إذا كان الإصدار قد تغيّر.
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUTدمج الشروط
يمكنك دمج التعبيرات باستخدام && (و)، و|| (أو)، و! (ليس).
يشغّل هذا المثال العملية فقط عند إجراء push ناجح إلى main وليس من fork.
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'استخدام if: always() مع needs
انتبه: تُتخطّى المهمة التي تستخدم needs إذا فشلت إحدى التبعيات. ولتشغيل مهمة إعداد التقارير النهائية مهما حدث، ادمج needs مع if: always().
يمكنك داخلها فحص needs.<job>.result لتحديد ما يجب الإبلاغ عنه.
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}اختبار سريع
اختبر مدى فهمك للتنفيذ المشروط.
مراجعة
تعلّمت التحكم في تدفق سير العمل باستخدام الشروط والتبعيات.
- يتحكم
ifفي تشغيل الخطوات والمهام بالاعتماد على التعبيرات - تتجاوز دوال الحالة مثل
failure()وalways()التخطي عند الفشل - تنشئ
needsأنماط الترتيب وfan-in - تغذي
outputsالخاصة بالمهام الشروط اللاحقة بالقيم
تتيح لك هذه العناصر الأساسية إنشاء مسارات دقيقة وفعّالة.
الأسئلة الشائعة
هل درس «التنفيذ الشرطي واعتماديات المهام» مجاني؟
نعم — نص درس «التنفيذ الشرطي واعتماديات المهام» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CI/CD with GitHub Actions & DevOps Pipelines، انتقل إلى CoddyKit PRO. تتضمن دورة CI/CD with GitHub Actions & DevOps Pipelines 4 دروس في المجموع.
ماذا ستتعلم في «التنفيذ الشرطي واعتماديات المهام»؟
تحكّم في وقت تشغيل الخطوات والمهام باستخدام شروط if والكلمة المفتاحية needs والتعبيرات ودوال التحقق من الحالة في مسارات عمل GitHub Actions تتمرن على CI/CD with GitHub Actions & DevOps Pipelines مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CI/CD with GitHub Actions & DevOps Pipelines؟
لا تُشترط خبرة سابقة. CI/CD with GitHub Actions & DevOps Pipelines على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التنفيذ الشرطي واعتماديات المهام»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CI/CD with GitHub Actions & DevOps Pipelines هذا؟
نعم. كل درس في CI/CD with GitHub Actions & DevOps Pipelines يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عمليات البناء المصفوفية لبيئات متعددة
- تخزين الاعتماديات مؤقتًا لتسريع التنفيذ
- سير العمل والإجراءات القابلة لإعادة الاستخدام
- التنفيذ الشرطي واعتماديات المهام