لدى الـ 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، وقواعد المحاسبة الدقيقة في حدود صناديق الرمل ومحاسبتها.
ذو صلة: صندوق رمل لمراجعة الشيفرة وفحوص طلبات السحب وصندوق رمل لوكلاء الذكاء الاصطناعي.
التعليقات
لا تعليقات بعد. كن الأول.