لماذا GitHub Actions بطيء؟ أوقف إعادة بناء الحالة في كل مهمة
معظم وقت مهمة GitHub Actions البطيئة يمضي قبل أن يعمل أول اختبار. إعداد Node، وتنزيل التبعيات، وبناء صورة Docker: الدقائق نفسها مع كل دفع، بينما ينتظر أحد أفراد فريقك العلامة الخضراء. وفي الفوترة بالدقيقة تدفع ثمن تلك الدقائق أيضًا.
Skipbox مشغّل GitHub Actions يحتفظ بجهازه بين المهام، فما ثبّتته مهمة يبقى على القرص للمهمة التالية. غيّر سطرًا واحدًا، runs-on: skipbox، فتعمل المهمة على جهازك الخاص بسعر ثابت قدره $39 شهريًا مع دقائق غير محدودة.
كل مهمة تبدأ من جهاز افتراضي فارغ
المشغّل المستضاف على GitHub جهاز افتراضي جديد لكل مهمة. لا شيء مما نزّلته أو بنته المهمة السابقة موجود عليه، فتعيد كل مهمة بناء الحالة نفسها:
| الخطوة | مشغّل مستضاف على GitHub | Skipbox |
|---|---|---|
| إعداد Node وPython وJava | يُنزّل سلسلة الأدوات | يجدها في ذاكرة الأدوات المؤقتة من المهمة السابقة |
| تثبيت التبعيات | يُنزّل أرشيف ذاكرة التخزين المؤقت ويفكّ ضغطه؛ وإن لم يجده، يُنزّل كل شيء من السجلّ | يقرأ ذاكرة التخزين المؤقت لمدير الحزم من القرص |
| بناء صورة Docker | يبدأ دون طبقات ويعيد بناء كل خطوة | يعيد استخدام طبقات البناء السابق |
| تشغيل الاختبارات | عدد وحدات CPU: 2 في ubuntu-latest على مستودع خاص | 4 vCPU فأكثر |
الصفوف الثلاثة الأولى لا تنتج شيئًا جديدًا. إنها تعيد الجهاز إلى ما كان عليه بالأمس.
ذاكرة التخزين المؤقت في GitHub تخفف المشكلة دون أن تغيّرها. فهي تتسع لـ 10 GB لكل مستودع، وتحذف الإدخالات التي لم تقرأها أي مهمة منذ 7 أيام، ولا يستطيع فرع ميزة جديد قراءة ذاكرة فرع ميزة آخر. وحتى حين تجدها المهمة، تُنزّل أرشيفًا وتفكّ ضغطه في كل تشغيل.
ما يكلّفك الانتظار
لنفترض أن الإعداد يستغرق 3 دقائق من كل مهمة، وأن فريقك يشغّل 100 مهمة يوميًا. هذه 300 دقيقة يوميًا من وقت المشغّل تُصرف لإعادة الجهاز إلى حاله، وكل طلب سحب ينتظر حصته منها. تبدأ المراجعات متأخرة، ويتأخر الدمج، وينتقل المهندسون إلى عمل آخر وهم ينتظرون.
وفي الفوترة بالدقيقة، تظهر تلك الدقائق في الفاتورة. مشغّل بـ 4 vCPU، حسب الدقائق الشهرية:
| الدقائق شهريًا (4 vCPU) | GitHub | Skipbox S | توفيرك كل شهر |
|---|---|---|---|
| 10,000 | $102 | $39 | $63 |
| 20,000 | $222 | $39 | $183 |
| 30,000 | $342 | $39 | $303 |
أرقام GitHub هي الفاتورة بعد خصم الاستخدام المضمّن في GitHub Team. أدخل دقائقك في حاسبة التكلفة في الصفحة الرئيسية؛ لا تحتاج إلى تسجيل دخول.
وعدد التشغيلات لا يتجه إلا صعودًا:
- وكلاء البرمجة بالذكاء الاصطناعي. كل دفع من وكيل يشغّل التكامل المستمر. والانتظار والفاتورة يكبران مع عدد مرات الدفع، لا مع عدد الموظفين.
- اختبارات أكثر. مجموعة اختبارات شاملة (E2E) أو مصفوفة بناء تكرر الإعداد في كل مهمة تضيفها.
- الميزانيات. حدّ الفاتورة بميزانية في GitHub، فتتوقف المهام عن البدء في منتصف الشهر، ويتوقف معها الدمج.
تسريعه بنفسك مشروع كامل
الإبقاء على المشغّلات المستضافة على GitHub مع جعلها سريعة يعني أن تتحمل عملًا كهذا:
- بناء مفاتيح التخزين المؤقت على قيم التجزئة لملفات القفل، وضبط
restore-keysحتى تصيب - إضافة buildx وتصدير ذاكرة Docker المؤقتة باستخدام
cache-to، ضمن الـ 10 GB نفسها - تقسيم الاختبارات إلى أجزاء، فيكرر كل جزء الإعداد وتزيد الدقائق المحتسبة
- أو تشغيل مشغّل مستضاف ذاتيًا بنفسك: التجهيز، وتحديثات نظام التشغيل، والتنظيف بين المهام، وإصلاحه حين يتعطل
كل واحدة منها تلتفّ على جهاز ينسى كل شيء. أما Skipbox فيحتفظ بالجهاز، فلا حاجة إلى أي منها.
ما الذي يتغير على Skipbox
الإعداد يبقى على القرص. تعمل مهامك على جهاز خاص بحسابك، ويبقى بين المهام. صور Docker وطبقاتها وذاكرة التخزين المؤقت للبناء؛ وذاكرة التخزين المؤقت للحزم في npm وpip وGradle وغيرها؛ والأدوات التي تثبّتها setup-node وأمثالها. 7× على الأقل من مساحة التخزين المؤقت في GitHub، دون انتهاء صلاحية بعد 7 أيام ودون قيود الفروع.
أجهزة أكبر بسعر ثابت. تُطلق أدوات الترجمة البرمجية ومشغّلات الاختبارات عاملًا واحدًا لكل نواة، فالأنوية الأكثر تقصّر الخطوات التي يحدّها المعالج.
| الخطة | الجهاز | السعر |
|---|---|---|
| S | 4 vCPU · 16 GB | $39 شهريًا |
| M | 8 vCPU · 16 GB | $79 شهريًا |
| L | 16 vCPU · 32 GB | $149 شهريًا |
الدقائق غير محدودة في كل الخطط. ولا تستهلك مهام Skipbox أي دقائق من GitHub، فلا توقفها ميزانية GitHub أبدًا.
لا جهاز تعتني به. يجهّز Skipbox الجهاز، ويحدّث نظام التشغيل والأدوات، وينظّف بعد كل مهمة، ويُجري فحص سلامة، ويعيد بناء الجهاز الذي يفشل فيه.
الانتقال سطر واحد
jobs:
build:
runs-on: skipbox # was ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test
- سجّل الدخول إلى Skipbox باستخدام GitHub.
- ثبّت تطبيق Skipbox على GitHub واختر المستودعات.
- غيّر
runs-onثم ادفع التغيير.
ما تثبّته المهمة الأولى يبقى على القرص للثانية.
الأمان
- الجهاز لحسابك وحده، ولا تعمل عليه مهام أي شركة أخرى.
- بعد كل مهمة، تُمسح بيانات اعتماد المشغّل وعملياته وحاوياته. ومنذ 13 نوفمبر 2026، تبقى نسخة الكود المسحوبة ومخرجات بنائها (
target/الخاص بـ Cargo) على جهازك الخاص لمهامك التالية؛ ويمنح خيار «مهمة نظيفة في كل مرة» كل مهمة جهازًا جديدًا. - الكود الوارد من أشخاص ليس لديهم صلاحية الكتابة (مثل طلبات السحب من النسخ المتفرعة) يعمل على جهاز جديد يُستخدم مرة واحدة ثم يُحذف.
التفاصيل في كيف تُعزل المهام.
جرّبه على أبطأ مهامك
الفترة التجريبية مجانية لمدة 7 أيام أو 3,000 دقيقة من وقت المهام، أيهما يأتي أولًا، ولا تتطلب بطاقة. انقل أبطأ مهامك إلى runs-on: skipbox، وشغّلها مرتين متتاليتين، وضع أوقات خطواتها بجانب أوقاتها على GitHub.
الأسئلة الشائعة
لماذا GitHub Actions بطيء إلى هذا الحد؟
لأن كل مهمة على مشغّل مستضاف على GitHub تبدأ على جهاز افتراضي جديد لا شيء فيه من التشغيل السابق، فتُنزّل أدواتها وتعيد تثبيت تبعياتها وتعيد بناء صور Docker قبل أن تبدأ اختباراتك. يشغّل Skipbox مهامك على جهاز خاص بحسابك ويحتفظ بتلك الحالة على قرصه، فتبدأ المهمة التالية من حيث توقفت السابقة.
أضفت actions/cache، فلماذا ما زال سير العمل بطيئًا؟
لأن المهمة، حتى حين تجد ذاكرة التخزين المؤقت، تُنزّل أرشيفًا وتفكّ ضغطه في كل مرة، إذ إن الجهاز الافتراضي جديد كل مرة. كما أن ذاكرة التخزين المؤقت في GitHub تتسع لـ 10 GB لكل مستودع، وتحذف الإدخالات التي لم تُستخدم منذ 7 أيام، ولا يمكن قراءتها من فرع موازٍ. أما على Skipbox فذاكرة التخزين المؤقت للحزم وطبقات Docker موجودة أصلًا على قرص الجهاز، دون مفاتيح تديرها.
كيف أسرّع بناء Docker في GitHub Actions؟
امنح البناء طبقات البناء السابق. على المشغّلات المستضافة على GitHub، يعني ذلك تصدير ذاكرة التخزين المؤقت باستخدام buildx واستيرادها في كل تشغيل، ضمن حد 10 GB نفسه. وعلى Skipbox، تبقى صور Docker وذاكرة التخزين المؤقت للبناء على الجهاز بين المهام، فيعيد docker build استخدام الطبقات من تلقاء نفسه.
هل عليّ إعادة كتابة سير العمل لأستخدم Skipbox؟
لا. في مهام Linux، غيّر runs-on إلى skipbox. يعمل الجهاز بنظام Ubuntu 24.04 مع Docker وNode.js وPython، وتعمل خطواتك وإجراءاتك كما هي.
هل يمكنني تجربته مجانًا على مهمتي البطيئة؟
نعم. الفترة التجريبية 7 أيام أو 3,000 دقيقة من وقت المهام، أيهما يأتي أولًا، دون بطاقة. انقل أبطأ مهامك إلى runs-on: skipbox، وشغّلها مرتين متتاليتين، وقارن أوقات الخطوات بأوقاتها على GitHub.
آخر تحديث: 11 نوفمبر 2026