−25%

cho Windows trả theo năm, đến 31/10. Xem các gói

EQVPS
Bắt đầu

Sandbox cho CI: chạy test cô lập với chi phí dưới một cent mỗi lần

Chạy test cho mã bạn không tin tưởng — pull request từ người lạ, bản vá được sinh tự động — trong một microVM mới tinh, bị xóa sau khi chạy xong. Tính phí theo giây, SDK cho Python và TS, nói thẳng về giới hạn chạy đồng thời.

Runner CI self-hosted có một đặc điểm khó chịu: chúng nhớ mọi thứ. Cache, token, một khóa deploy mà ai đó đã thêm "tạm thời" từ mùa xuân năm ngoái. Với các branch của chính bạn thì không sao. Vấn đề bắt đầu khi có một pull request từ người bạn chưa từng nghe tên — hoặc từ chính AI agent của bạn, vốn vừa viết một bản vá chưa ai đọc.

Câu trả lời gọn gàng là mỗi lần chạy một máy. Clone, cài đặt, test, vứt máy đi.

Một lần chạy trông như thế nào

Sandbox là một microVM Firecracker khởi động trong khoảng một giây với Python 3.12, Node.js 22, git và curl. Internet chiều đi hoạt động, nên git clone và pip install -r requirements.txt chạy như bình thường. Không có cổng chiều vào — không gì có thể kết nối vào môi trường test khi nó đang chạy.

Từ một job CI, toàn bộ chỉ là một script ngắn. Đây là phiên bản dùng SDK Python, gọi được từ bất kỳ job CI nào:

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 nằm trong secret của CI dưới tên EQVPS_API_KEY. Ngoài ra không gì từ CI của bạn — không khóa deploy, không thông tin đăng nhập cloud — đi vào sandbox. Khi khối with kết thúc, sandbox bị xóa, kể cả khi job gặp sự cố giữa chừng.

Bản thân lần chạy test là một tác vụ nền, vì một lệnh đồng bộ đơn lẻ sẽ dừng ở giây thứ 55. Tác vụ nền truyền output trong lúc làm việc và có thể chạy tiếp đến TTL của sandbox — ở đây đặt 30 phút để một bài test bị treo không đẩy hóa đơn lên.

Những giới hạn bạn thực sự sẽ gặp

Nói thẳng về chúng sẽ giúp bạn tiết kiệm cả buổi chiều.

Chạy đồng thời. Một tài khoản có thể giữ 20 sandbox, nhưng chỉ 2 lệnh được thực thi cùng lúc. Với CI, đó là hai job thực sự chạy song song. Mười PR đến cùng lúc sẽ phải xếp hàng. Nếu pipeline của bạn chia test cho 16 worker, đây không phải công cụ cho pipeline chính — hãy giữ nó trên runner của chính bạn ở VPS và dùng sandbox cho làn không đáng tin.

Không có container bên trong. Docker không đi kèm sandbox. Test unit và test tích hợp cần container Postgres sẽ không chạy được nguyên trạng; test dùng SQLite hoặc bản giả lập trong bộ nhớ thì chạy được.

Tệp. Tải lên và tải xuống qua API tối đa 5 MB mỗi tệp. Hãy kéo mã bằng git bên trong sandbox thay vì tải lên một tệp nén.

Chi phí bao nhiêu

Bạn trả cho vCPU và RAM của gói theo giây, tối thiểu 60 giây, từ số dư trả trước — không cần đăng ký thuê bao.

Lần chạyGóiChi phí ước tính
Lint + test unit, 1 phútsmall (0.5 vCPU, 1 GB)$0.0006
Toàn bộ bộ test, 3 phútstandard (1 vCPU, 2 GB)$0.0033
Build + test, 10 phútplus (2 vCPU, 4 GB)$0.022

Với mức giá này, câu hỏi đáng quan tâm không phải là chi phí, mà là test có hoàn thành trong thời gian bạn đặt hay không. Hãy để TTL dư một chút so với lần chạy xanh chậm nhất của bạn.

Một cách chia hợp lý

Khuyến nghị của chúng tôi: giữ các branch đáng tin trên runner nhanh có cache của bạn. Đưa mọi thứ không phải do bạn viết — fork, người đóng góp bên ngoài, bản vá do agent sinh ra — qua sandbox trước. Nếu lần chạy trong sandbox xanh và đã có người xem diff, hãy nâng nó lên pipeline đáng tin.

Như vậy bạn có một làn nơi tốc độ và cache quan trọng, và một làn nơi máy sạch quan trọng, mà không bắt một công cụ phải kiêm cả hai.

Hãy bắt đầu với trang tổng quan sandbox và hướng dẫn kết nối — tài khoản mới nhận $1 thời gian sandbox, đủ cho vài trăm lần chạy test ngắn. Mọi phương thức dùng ở trên đều có trong tài liệu tham khảo SDK, còn quy tắc tính phí chính xác nằm ở giới hạn và tính phí sandbox.

Liên quan: sandbox cho review mã và kiểm tra PR và sandbox cho AI agent.

Sẵn sàng triển khai? Thanh toán bằng crypto, không KYC — trực tuyến trong khoảng một phút.

Triển khai ngay →

FAQ

Sao không chạy pull request không đáng tin trên runner self-hosted của tôi?

Runner self-hosted giữ trạng thái giữa các job và thường chứa khóa deploy hoặc thông tin đăng nhập cloud. Một pull request từ người bạn không quen có thể đọc chúng chỉ trong một bước. Sandbox lần nào cũng khởi động sạch và không chứa gì ngoài mã đang được test.

Một bài test có thể chạy lâu hơn 55 giây không?

Có. Giới hạn 55 giây áp dụng cho từng lệnh đồng bộ. Hãy khởi chạy bộ test dưới dạng tác vụ nền, lấy output định kỳ, và nó có thể chạy đến khi vòng đời sandbox kết thúc — tối đa 24 giờ với sandbox tạm thời.

Có thể chạy song song bao nhiêu lần test?

Tối đa 20 sandbox mỗi tài khoản, nhưng chỉ 2 lệnh được thực thi cùng lúc trên mỗi tài khoản. Với CI, điều đó nghĩa là hai job thực sự chạy đồng thời; phần còn lại xếp hàng. Nếu cần chia shard song song rộng, một đội runner trên VPS sẽ phù hợp hơn.

Trong sandbox có Docker không?

Sandbox có sẵn Python 3.12, Node.js 22, bash, git và curl, còn thư viện phụ thuộc thì bạn cài bằng pip hoặc npm. Docker không có trong đó — nếu test của bạn khởi chạy container, hãy chạy chúng trên runner ở VPS.

Một lần chạy tốn bao nhiêu?

Theo giây, tối thiểu 60 giây, cho vCPU và RAM của gói. Một lần chạy ba phút trên gói standard (1 vCPU, 2 GB) tốn khoảng $0.0033.

Bình luận

Chưa có bình luận nào. Hãy là người đầu tiên.

Để lại bình luận

Bình luận được kiểm duyệt trước khi hiển thị.