ל-runners של CI שמתארחים אצלכם יש תכונה מביכה אחת: הם זוכרים הכול. מטמונים, טוקנים, מפתח פריסה שמישהו הוסיף "זמנית" באביב שעבר. לענפים שלכם זה בסדר. הבעיה מתחילה ברגע שמגיע pull request ממישהו שמעולם לא שמעתם עליו — או מסוכן ה-AI שלכם, שכתב תיקון שאיש עוד לא קרא.
התשובה הנקייה היא מכונה לכל הרצה. לשכפל, להתקין, לבדוק, לזרוק את המכונה.
איך נראית הרצה
ארגז חול הוא 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 ארגזי חול, אבל רק 2 פקודות רצות בו־זמנית. ב-CI אלה שתי משימות שרצות באמת במקביל. עשרה PR שמגיעים יחד ייכנסו לתור. אם ה-pipeline שלכם מפצל בדיקות ל-16 workers, זה לא הכלי הנכון ל-pipeline הראשי — השאירו אותו על ה-runners שלכם על VPS, והשתמשו בארגזי חול למסלול הלא אמין.
אין קונטיינרים בפנים. Docker לא מגיע עם ארגז החול. בדיקות יחידה ואינטגרציה שצריכות קונטיינר Postgres לא יעבדו כמות שהן; בדיקות מול SQLite או מול אובייקט מדומה בזיכרון — כן.
קבצים. העלאה והורדה דרך ה-API מוגבלות ל-5 MB לקובץ. משכו את הקוד עם git בתוך ארגז החול במקום להעלות ארכיון.
כמה זה עולה
אתם משלמים עבור ה-vCPU וה-RAM של התעריף לפי שנייה, מינימום 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 המהיר שלכם עם המטמון. העבירו קודם דרך ארגז חול כל מה שלא כתבתם בעצמכם — forks, תורמים חיצוניים, תיקונים שנוצרו בידי סוכנים. אם ההרצה בארגז החול ירוקה ואדם הסתכל על ה-diff, קדמו אותה ל-pipeline האמין.
כך יש לכם מסלול אחד שבו המהירות והמטמון חשובים, ומסלול אחר שבו מכונה נקייה חשובה, בלי לכפות על כלי אחד להיות שניהם.
התחילו בסקירת ארגזי החול ובמדריך החיבור — חשבונות חדשים מקבלים 1 דולר של זמן ארגז חול, שמספיק לכמה מאות הרצות בדיקה קצרות. כל שיטה שהשתמשנו בה למעלה נמצאת במדריך ה-SDK, וכללי החיוב המדויקים במגבלות וחיוב של ארגזי חול.
תגובות
אין עדיין תגובות. היו הראשונים.