Οι self-hosted runners του CI έχουν μια άβολη ιδιότητα: θυμούνται τα πάντα. Caches, tokens, ένα κλειδί deploy που κάποιος πρόσθεσε «προσωρινά» την περασμένη άνοιξη. Για τα δικά σας branches, εντάξει. Το πρόβλημα ξεκινά τη στιγμή που φτάνει ένα pull request από κάποιον που δεν έχετε ακούσει ποτέ — ή από τον δικό σας πράκτορα AI, που έγραψε ένα patch που κανείς δεν έχει διαβάσει ακόμα.
Η καθαρή απάντηση είναι μία μηχανή ανά εκτέλεση. Clone, εγκατάσταση, δοκιμή, πετάτε τη μηχανή.
Πώς μοιάζει μια εκτέλεση
Ένα sandbox είναι ένα microVM Firecracker που ξεκινά σε περίπου ένα δευτερόλεπτο με Python 3.12, Node.js 22, git και curl. Η εξερχόμενη σύνδεση στο διαδίκτυο λειτουργεί, οπότε τα git clone και pip install -r requirements.txt συμπεριφέρονται κανονικά. Δεν υπάρχουν εισερχόμενες θύρες — τίποτα δεν μπορεί να συνδεθεί στο περιβάλλον δοκιμών όσο τρέχει.
Από μια εργασία CI, όλο αυτό είναι ένα σύντομο script. Εδώ με το 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)
Το token βρίσκεται στα μυστικά του CI σας ως EQVPS_API_KEY. Τίποτα άλλο από το CI σας — ούτε κλειδιά deploy, ούτε διαπιστευτήρια cloud — δεν μπαίνει στο sandbox. Όταν τελειώνει το μπλοκ with, το sandbox διαγράφεται, ακόμα κι αν η εργασία κατέρρευσε στη μέση.
Η ίδια η εκτέλεση των δοκιμών είναι εργασία παρασκηνίου, επειδή μία σύγχρονη εντολή σταματά στα 55 δευτερόλεπτα. Μια εργασία παρασκηνίου μεταδίδει την έξοδό της όσο δουλεύει και μπορεί να συνεχίσει έως το TTL του sandbox — εδώ ορισμένο στα 30 λεπτά, ώστε μια κολλημένη δοκιμή να μη φουσκώσει τον λογαριασμό.
Τα όρια που θα συναντήσετε στην πράξη
Η ειλικρίνεια γι' αυτά σας γλιτώνει ένα απόγευμα.
Ταυτόχρονη εκτέλεση. Ένας λογαριασμός μπορεί να έχει 20 sandboxes, αλλά μόνο 2 εντολές εκτελούνται ταυτόχρονα. Για το CI αυτό σημαίνει δύο εργασίες πραγματικά παράλληλες. Δέκα PR που φτάνουν μαζί θα μπουν σε ουρά. Αν το pipeline σας μοιράζει τις δοκιμές σε 16 workers, αυτό δεν είναι το σωστό εργαλείο για το κύριο pipeline — κρατήστε το στους δικούς σας runners σε VPS και χρησιμοποιήστε τα sandboxes για τη μη έμπιστη λωρίδα.
Χωρίς containers μέσα. Το Docker δεν περιλαμβάνεται στο sandbox. Οι δοκιμές μονάδας και ολοκλήρωσης που χρειάζονται container Postgres δεν θα δουλέψουν ως έχουν· οι δοκιμές με SQLite ή με ψεύτικο αντικείμενο στη μνήμη θα δουλέψουν.
Αρχεία. Η αποστολή και λήψη μέσω API φτάνει έως 5 MB ανά αρχείο. Τραβήξτε τον κώδικα με git μέσα στο sandbox αντί να ανεβάσετε αρχείο συμπιεσμένο.
Πόσο κοστίζει
Πληρώνετε τα vCPU και τη RAM του τιμολογίου ανά δευτερόλεπτο, ελάχιστο 60 δευτερόλεπτα, από προπληρωμένο υπόλοιπο — χωρίς συνδρομή.
| Εκτέλεση | Τιμολόγιο | Κατά προσέγγιση κόστος |
|---|---|---|
| Lint + δοκιμές μονάδας, 1 λεπτό | small (0.5 vCPU, 1 GB) | $0.0006 |
| Πλήρης σουίτα, 3 λεπτά | standard (1 vCPU, 2 GB) | $0.0033 |
| Build + δοκιμές, 10 λεπτά | plus (2 vCPU, 4 GB) | $0.022 |
Σε αυτές τις τιμές το ενδιαφέρον ερώτημα δεν είναι το κόστος, αλλά αν οι δοκιμές τελειώνουν μέσα στον χρόνο που ορίσατε. Δώστε στο TTL λίγο περιθώριο πάνω από την πιο αργή πράσινη εκτέλεσή σας.
Ένας λογικός διαχωρισμός
Η σύστασή μας: κρατήστε τα έμπιστα branches στον γρήγορο runner σας με cache. Περάστε πρώτα από sandbox ό,τι δεν γράψατε εσείς — forks, εξωτερικούς συνεισφέροντες, patches από πράκτορες. Αν η εκτέλεση στο sandbox είναι πράσινη και ένας άνθρωπος έχει δει το diff, προωθήστε το στο έμπιστο pipeline.
Έτσι έχετε μία λωρίδα όπου μετρούν η ταχύτητα και η cache, και μία όπου μετρά η καθαρή μηχανή, χωρίς να αναγκάζετε ένα εργαλείο να είναι και τα δύο.
Ξεκινήστε από την επισκόπηση των sandboxes και τον οδηγό σύνδεσης — οι νέοι λογαριασμοί παίρνουν $1 χρόνου sandbox, αρκετό για μερικές εκατοντάδες σύντομες εκτελέσεις. Κάθε μέθοδος που χρησιμοποιείται παραπάνω βρίσκεται στην τεκμηρίωση του SDK, και οι ακριβείς κανόνες χρέωσης στα όρια και χρέωση των sandboxes.
Σχετικά: sandbox για έλεγχο κώδικα και ελέγχους PR και sandbox για πράκτορες AI.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.