−25%

auf Windows bei Jahreszahlung, bis 31.10. Zu den Tarifen

EQVPS
Loslegen

Sandbox für CI: isolierte Testläufe für weniger als einen Cent pro Lauf

Führen Sie Tests für Code aus, dem Sie nicht trauen – ein Pull Request von Fremden, ein generierter Patch – in einer frischen microVM, die nach dem Lauf gelöscht wird. Sekundengenaue Abrechnung, SDK für Python und TS, ehrlich zu den Parallelitätsgrenzen.

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.

LaufTarifUngefä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.

Bereit zum Bereitstellen? Zahle in Krypto, ohne KYC — online in etwa einer Minute.

Bereitstellen →

FAQ

Warum nicht einfach nicht vertrauenswürdige Pull Requests auf dem eigenen Self-hosted Runner laufen lassen?

Ein Self-hosted Runner behält Zustand zwischen Jobs und hält meist Deploy-Keys oder Cloud-Zugangsdaten. Ein Pull Request von jemandem, den Sie nicht kennen, kann sie in einem Schritt auslesen. Eine Sandbox startet jedes Mal sauber und enthält nichts außer dem getesteten Code.

Kann ein Test länger als 55 Sekunden laufen?

Ja. Die 55-Sekunden-Grenze gilt pro synchronem Befehl. Starten Sie die Testsuite als Hintergrund-Task, fragen Sie ihre Ausgabe ab, und sie kann bis zum Ende der Sandbox-Lebensdauer laufen – bei einer flüchtigen Sandbox bis zu 24 Stunden.

Wie viele Testläufe gehen parallel?

Bis zu 20 Sandboxes pro Konto, aber nur 2 gleichzeitig ausgeführte Befehle pro Konto. Für CI heißt das: zwei Jobs laufen wirklich gleichzeitig, der Rest wartet. Wenn Sie breites paralleles Sharding brauchen, passt eine Flotte von Runnern auf VPS besser.

Gibt es Docker in der Sandbox?

Die Sandbox bringt Python 3.12, Node.js 22, bash, git und curl mit, Abhängigkeiten installieren Sie mit pip oder npm. Docker gehört nicht dazu – wenn Ihre Tests Container starten, lassen Sie sie auf einem VPS-Runner laufen.

Was kostet ein Lauf?

Pro Sekunde, mindestens 60 Sekunden, für vCPU und RAM des Tarifs. Ein dreiminütiger Lauf im Tarif standard (1 vCPU, 2 GB) kostet etwa $0.0033.

Kommentare

Noch keine Kommentare. Sei der Erste.

Kommentar hinterlassen

Kommentare werden vor der Anzeige moderiert.