−25%

στα Windows με ετήσια χρέωση, έως 31/10. Δείτε τα πακέτα

EQVPS
Ξεκινήστε

Sandbox για CI: απομονωμένες εκτελέσεις δοκιμών με λιγότερο από ένα σεντ η καθεμία

Τρέξτε δοκιμές για κώδικα που δεν εμπιστεύεστε — ένα pull request από άγνωστο, ένα παραγόμενο patch — σε ένα καινούργιο microVM που διαγράφεται μετά την εκτέλεση. Χρέωση ανά δευτερόλεπτο, SDK για Python και TS, και ειλικρίνεια για τα όρια ταυτόχρονης εκτέλεσης.

Οι 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.

Έτοιμοι για ανάπτυξη; Πληρωμή με crypto, χωρίς KYC — έτοιμο σε περίπου ένα λεπτό.

Ανάπτυξη τώρα →

Συχνές ερωτήσεις

Γιατί να μην τρέχω μη έμπιστα pull requests στον δικό μου self-hosted runner;

Ένας self-hosted runner κρατά κατάσταση από εργασία σε εργασία και συνήθως έχει κλειδιά deploy ή διαπιστευτήρια cloud. Ένα pull request από κάποιον που δεν γνωρίζετε μπορεί να τα διαβάσει σε ένα βήμα. Ένα sandbox ξεκινά καθαρό κάθε φορά και δεν περιέχει τίποτα πέρα από τον κώδικα υπό δοκιμή.

Μπορεί μια δοκιμή να διαρκέσει πάνω από 55 δευτερόλεπτα;

Ναι. Το όριο των 55 δευτερολέπτων ισχύει ανά σύγχρονη εντολή. Ξεκινήστε τη σουίτα δοκιμών ως εργασία παρασκηνίου, ελέγχετε την έξοδό της, και μπορεί να τρέχει μέχρι να λήξει η διάρκεια ζωής του sandbox — έως 24 ώρες για προσωρινό sandbox.

Πόσες εκτελέσεις δοκιμών μπορούν να τρέξουν παράλληλα;

Έως 20 sandboxes ανά λογαριασμό, αλλά μόνο 2 εντολές εκτελούνται ταυτόχρονα ανά λογαριασμό. Για το CI αυτό σημαίνει δύο εργασίες που τρέχουν πραγματικά ταυτόχρονα· οι υπόλοιπες περιμένουν σε ουρά. Αν χρειάζεστε ευρύ παράλληλο sharding, ταιριάζει καλύτερα ένας στόλος runners σε VPS.

Υπάρχει Docker μέσα στο sandbox;

Το sandbox περιλαμβάνει Python 3.12, Node.js 22, bash, git και curl, και τις εξαρτήσεις τις εγκαθιστάτε με pip ή npm. Το Docker δεν περιλαμβάνεται — αν οι δοκιμές σας ξεκινούν containers, τρέξτε τες σε runner σε VPS.

Πόσο κοστίζει μία εκτέλεση;

Ανά δευτερόλεπτο, ελάχιστο 60 δευτερόλεπτα, για τα vCPU και τη RAM του τιμολογίου. Μια τρίλεπτη εκτέλεση στο τιμολόγιο standard (1 vCPU, 2 GB) κοστίζει περίπου $0.0033.

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.