−25%

على الدفع السنوي لـ Windows حتى 31 أكتوبر. عرض الخطط

EQVPS
ابدأ الآن

صندوق رمل لـ CI: تشغيلات اختبار معزولة بأقل من سنت للتشغيل الواحد

شغّل اختبارات شيفرة لا تثق بها — طلب سحب من شخص غريب، أو رقعة مولَّدة آليًا — في microVM جديدة تُحذف بعد انتهاء التشغيل. محاسبة بالثانية، و SDK لـ Python و TS، وصراحة تامة بشأن حدود التشغيل المتزامن.

لدى الـ runners المستضافة ذاتيًا في CI خاصية مزعجة: إنها تتذكر كل شيء. ذاكرات تخزين مؤقت، ورموز وصول، ومفتاح نشر أضافه أحدهم "مؤقتًا" في الربيع الماضي. لا بأس بذلك لفروعك الخاصة. لكن المشكلة تبدأ لحظة وصول طلب سحب من شخص لم تسمع به من قبل — أو من وكيل الذكاء الاصطناعي الخاص بك، الذي كتب رقعة لم يقرأها أحد بعد.

الحل النظيف هو جهاز لكل تشغيل. استنسخ، ثبّت، اختبر، ثم تخلّص من الجهاز.

كيف يبدو التشغيل

صندوق الرمل هو Firecracker microVM تبدأ في نحو ثانية مع Python 3.12 و Node.js 22 و git و curl. الإنترنت الصادر يعمل، لذا يتصرف كل من git clone و pip install -r requirements.txt كالمعتاد. لا توجد منافذ واردة — لا شيء يستطيع الاتصال ببيئة الاختبار أثناء عملها.

من داخل مهمة CI، الأمر كله سكربت قصير. إليك نسخته عبر SDK الخاص بـ Python، ويمكن استدعاؤه من أي مهمة CI:

import os, sys
from eqvps import Sandbox

repo, ref = os.environ["REPO_URL"], os.environ["PR_SHA"]

with Sandbox.create(tariff="standard", ttl=1800) as sb:
    sb.exec(f"git clone {repo} /root/app && cd /root/app && git checkout {ref}", timeout=55)
    sb.exec("cd /root/app && pip install -r requirements.txt", timeout=55)
    task = sb.exec("cd /root/app && python3 -m pytest -q", background=True)
    result = task.wait(on_output=lambda out, err: print(out, end=""))
sys.exit(result.exit_code or 0)

يُحفظ رمز الوصول في أسرار CI باسم EQVPS_API_KEY. لا يدخل صندوقَ الرمل شيءٌ آخر من CI — لا مفاتيح نشر ولا بيانات اعتماد سحابية. عند انتهاء كتلة with يُحذف صندوق الرمل، حتى لو تعطلت المهمة في منتصفها.

تشغيل الاختبارات نفسه مهمة في الخلفية، لأن الأمر المتزامن الواحد يتوقف عند 55 ثانية. المهمة في الخلفية تبث مخرجاتها أثناء العمل ويمكن أن تستمر حتى TTL صندوق الرمل — وقد ضُبط هنا على 30 دقيقة كي لا يرفع اختبار عالق الفاتورة.

الحدود التي ستصطدم بها فعلًا

الصراحة بشأنها توفر عليك ظهيرة كاملة.

التزامن. يمكن للحساب أن يحتفظ بـ 20 صندوق رمل، لكن لا يُنفَّذ في الوقت نفسه إلا أمران. بالنسبة إلى CI، هاتان مهمتان تعملان بالتوازي حقًا. عشرة طلبات سحب تصل معًا ستنتظر في الطابور. إن كان خط الأنابيب لديك يوزع الاختبارات على 16 عاملًا، فهذه ليست الأداة المناسبة لخط الأنابيب الرئيسي — أبقِه على الـ runners الخاصة بك على VPS، واستخدم صناديق الرمل للمسار غير الموثوق.

لا حاويات في الداخل. لا يأتي Docker مع صندوق الرمل. اختبارات الوحدة والتكامل التي تحتاج إلى حاوية Postgres لن تعمل كما هي؛ أما الاختبارات المعتمدة على SQLite أو على كائن وهمي في الذاكرة فستعمل.

الملفات. الرفع والتنزيل عبر API يصلان إلى 5 MB لكل ملف. اجلب الشيفرة عبر git داخل صندوق الرمل بدل رفع أرشيف.

كم يكلّف

تدفع مقابل وحدات vCPU والذاكرة في الباقة بالثانية، بحد أدنى 60 ثانية، من رصيد مدفوع مسبقًا — بلا اشتراك.

التشغيلالباقةالتكلفة التقريبية
فحص الأسلوب + اختبارات الوحدة، دقيقة واحدةsmall (0.5 vCPU, 1 GB)$0.0006
الحزمة الكاملة، 3 دقائقstandard (1 vCPU, 2 GB)$0.0033
بناء + اختبارات، 10 دقائقplus (2 vCPU, 4 GB)$0.022

بهذه الأسعار، السؤال المهم ليس التكلفة، بل هل تنتهي اختباراتك ضمن الوقت الذي حددته. امنح الـ TTL هامشًا فوق أبطأ تشغيل ناجح لديك.

تقسيم معقول

توصيتنا: أبقِ الفروع الموثوقة على الـ runner السريع الذي يستخدم التخزين المؤقت. ومرّر أولًا عبر صندوق رمل كل ما لم تكتبه بنفسك — النسخ المتفرعة، والمساهمين الخارجيين، والرقع التي يولّدها الوكلاء. إن نجح التشغيل في صندوق الرمل ونظر إنسان في الفروقات، فارفعه إلى خط الأنابيب الموثوق.

بهذا يكون لديك مسار تهم فيه السرعة والتخزين المؤقت، ومسار آخر يهم فيه الجهاز النظيف، دون إجبار أداة واحدة على أن تكون الاثنين معًا.

ابدأ من صفحة التعريف بصناديق الرمل ودليل الاتصال — تحصل الحسابات الجديدة على رصيد 1 دولار من وقت صناديق الرمل، وهو يكفي لبضع مئات من التشغيلات القصيرة. كل طريقة مستخدمة أعلاه موجودة في مرجع SDK، وقواعد المحاسبة الدقيقة في حدود صناديق الرمل ومحاسبتها.

ذو صلة: صندوق رمل لمراجعة الشيفرة وفحوص طلبات السحب وصندوق رمل لوكلاء الذكاء الاصطناعي.

جاهز للنشر؟ ادفع بالعملات المشفّرة، بلا KYC — يعمل في نحو دقيقة.

← انشر الآن

الأسئلة الشائعة

لماذا لا أشغّل طلبات السحب غير الموثوقة على runner مستضاف ذاتيًا لديّ؟

الـ runner المستضاف ذاتيًا يحتفظ بالحالة بين المهام، وغالبًا ما يحمل مفاتيح نشر أو بيانات اعتماد سحابية. طلب سحب من شخص لا تعرفه يستطيع قراءتها في خطوة واحدة. أما صندوق الرمل فيبدأ نظيفًا في كل مرة ولا يحتوي إلا على الشيفرة قيد الاختبار.

هل يمكن أن يستمر الاختبار أكثر من 55 ثانية؟

نعم. حد الـ 55 ثانية يخص الأمر المتزامن الواحد. ابدأ حزمة الاختبارات كمهمة في الخلفية، واستطلع مخرجاتها، وستعمل حتى نهاية عمر صندوق الرمل — حتى 24 ساعة للصندوق المؤقت.

كم تشغيلًا يمكن أن يجري بالتوازي؟

حتى 20 صندوق رمل لكل حساب، لكن لا يُنفَّذ في الوقت نفسه إلا أمران لكل حساب. بالنسبة إلى CI يعني ذلك مهمتين تعملان فعلًا في آن واحد، والباقي ينتظر في الطابور. إن احتجت إلى تقسيم متوازٍ واسع، فأسطول من الـ runners على VPS أنسب.

هل يتوفر Docker داخل صندوق الرمل؟

يأتي صندوق الرمل مع Python 3.12 و Node.js 22 و bash و git و curl، وتثبّت الاعتماديات عبر pip أو npm. لا يتضمن Docker — إن كانت اختباراتك تشغّل حاويات، فشغّلها على runner في VPS.

كم يكلّف التشغيل الواحد؟

بالثانية، بحد أدنى 60 ثانية، مقابل وحدات vCPU والذاكرة في الباقة. تشغيل لمدة ثلاث دقائق على باقة standard (1 vCPU و 2 GB) يكلّف نحو 0.0033 دولار.

التعليقات

لا تعليقات بعد. كن الأول.

اترك تعليقًا

تُراجَع التعليقات قبل ظهورها.