Self-hosted CI-Runner haben eine unangenehme Eigenschaft: Sie merken sich alles. Caches, Tokens, ein Deploy-Key, den jemand letzten Frühling „vorübergehend“ hinzugefügt hat. Für die eigenen Branches ist das in Ordnung. Zum Problem wird es, sobald ein Pull Request von jemandem kommt, von dem Sie nie gehört haben – oder von Ihrem eigenen KI-Agenten, der einen Patch geschrieben hat, den noch niemand gelesen hat.
Die saubere Antwort ist eine Maschine pro Lauf. Klonen, installieren, testen, Maschine wegwerfen.
So sieht ein Lauf aus
Eine Sandbox ist eine Firecracker-microVM, die in etwa einer Sekunde mit Python 3.12, Node.js 22, git und curl startet. Ausgehendes Internet funktioniert, also verhalten sich git clone und pip install -r requirements.txt wie gewohnt. Eingehende Ports gibt es nicht – während des Laufs kann nichts die Testumgebung von außen erreichen.
Aus einem CI-Job heraus ist das Ganze ein kurzes Skript. Hier mit dem Python-SDK, aufrufbar aus jedem CI-Job:
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)
Das Token liegt in Ihren CI-Secrets als EQVPS_API_KEY. Sonst gelangt nichts aus Ihrer CI in die Sandbox – keine Deploy-Keys, keine Cloud-Zugangsdaten. Wenn der with-Block endet, wird die Sandbox gelöscht, auch wenn der Job mittendrin abgestürzt ist.
Der Testlauf selbst ist ein Hintergrund-Task, weil ein einzelner synchroner Befehl nach 55 Sekunden stoppt. Ein Hintergrund-Task streamt seine Ausgabe während der Arbeit und kann bis zur TTL der Sandbox laufen – hier 30 Minuten, damit ein hängender Test keine Rechnung auflaufen lässt.
Die Grenzen, an die Sie wirklich stoßen
Ehrlich darüber zu reden spart Ihnen einen Nachmittag.
Parallelität. Ein Konto kann 20 Sandboxes halten, aber nur 2 Befehle laufen gleichzeitig. Für CI sind das zwei Jobs, die wirklich parallel laufen. Zehn PRs, die zugleich eintreffen, stellen sich an. Wenn Ihre Pipeline Tests auf 16 Worker verteilt, ist das für die Haupt-Pipeline das falsche Werkzeug – lassen Sie die auf Ihren eigenen Runnern auf einem VPS und nutzen Sie Sandboxes für die nicht vertrauenswürdige Spur.
Keine Container darin. Docker ist in der Sandbox nicht enthalten. Unit- und Integrationstests, die einen Postgres-Container brauchen, funktionieren so nicht; Tests gegen SQLite oder ein In-Memory-Fake schon.
Dateien. Uploads und Downloads über die API gehen bis 5 MB pro Datei. Holen Sie den Code mit git in der Sandbox, statt ein Archiv hochzuladen.
Was es kostet
Sie zahlen vCPU und RAM des Tarifs pro Sekunde, mindestens 60 Sekunden, aus einem Prepaid-Guthaben – ohne Abo.
| Lauf | Tarif | Ungefähre Kosten |
|---|---|---|
| Linter + Unit-Tests, 1 Min. | small (0.5 vCPU, 1 GB) | $0.0006 |
| Volle Suite, 3 Min. | standard (1 vCPU, 2 GB) | $0.0033 |
| Build + Tests, 10 Min. | plus (2 vCPU, 4 GB) | $0.022 |
Bei diesen Preisen ist die spannende Frage nicht der Preis, sondern ob Ihre Tests in der eingestellten Zeit fertig werden. Geben Sie der TTL etwas Luft über Ihrem langsamsten grünen Lauf.
Eine sinnvolle Aufteilung
Unsere Empfehlung: Vertrauenswürdige Branches bleiben auf Ihrem schnellen Runner mit Cache. Alles, was Sie nicht selbst geschrieben haben – Forks, externe Beitragende, von Agenten erzeugte Patches –, läuft zuerst durch eine Sandbox. Ist der Sandbox-Lauf grün und hat ein Mensch den Diff angesehen, wandert er in die vertrauenswürdige Pipeline.
So haben Sie eine Spur, in der Tempo und Cache zählen, und eine, in der eine saubere Maschine zählt, ohne ein Werkzeug zu zwingen, beides zu sein.
Starten Sie mit der Sandbox-Übersicht und der Verbindungsanleitung – neue Konten erhalten $1 Sandbox-Zeit, das reicht für einige hundert kurze Testläufe. Jede oben genutzte Methode steht in der SDK-Referenz, die genauen Abrechnungsregeln unter Sandbox-Limits und Abrechnung.
Verwandt: Sandbox für Code-Review und PR-Prüfungen und Sandbox für KI-Agenten.
Kommentare
Noch keine Kommentare. Sei der Erste.