−25%

untuk Windows tahunan, hingga 31 Okt. Lihat paket

EQVPS
Mulai

Sandbox untuk CI: eksekusi tes terisolasi, kurang dari satu sen per eksekusi

Jalankan tes untuk kode yang tidak Anda percayai — pull request dari orang asing, patch hasil generate — di microVM baru yang dihapus setelah eksekusi. Penagihan per detik, SDK untuk Python dan TS, serta terus terang soal batas konkurensi.

Runner CI self-hosted punya satu sifat yang merepotkan: mereka mengingat semuanya. Cache, token, kunci deploy yang ditambahkan seseorang "untuk sementara" musim semi lalu. Untuk branch Anda sendiri, itu tidak masalah. Masalah muncul begitu ada pull request dari orang yang belum pernah Anda dengar — atau dari agen AI Anda sendiri, yang menulis patch yang belum dibaca siapa pun.

Jawaban yang bersih adalah satu mesin per eksekusi. Clone, instal, tes, buang mesinnya.

Seperti apa sebuah eksekusi

Sandbox adalah microVM Firecracker yang menyala dalam sekitar satu detik dengan Python 3.12, Node.js 22, git, dan curl. Internet keluar berfungsi, jadi git clone dan pip install -r requirements.txt berjalan seperti biasa. Tidak ada port masuk — tidak ada yang bisa menghubungi lingkungan tes selama ia berjalan.

Dari sebuah job CI, semuanya cukup dengan skrip pendek. Berikut dengan SDK Python, dipanggil dari job CI mana pun:

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 disimpan di secret CI Anda sebagai EQVPS_API_KEY. Tidak ada hal lain dari CI Anda — tidak ada kunci deploy, tidak ada kredensial cloud — yang masuk ke sandbox. Ketika blok with selesai, sandbox dihapus, juga jika job gagal di tengah jalan.

Eksekusi tesnya sendiri adalah tugas latar belakang, karena satu perintah sinkron berhenti di 55 detik. Tugas latar belakang mengalirkan output selama bekerja dan bisa berlanjut sampai TTL sandbox — di sini diatur 30 menit agar tes yang macet tidak membengkakkan tagihan.

Batas yang benar-benar akan Anda temui

Jujur soal ini menghemat waktu Anda satu sore.

Konkurensi. Satu akun bisa memegang 20 sandbox, tetapi hanya 2 perintah yang dieksekusi bersamaan. Untuk CI, itu dua job yang benar-benar paralel. Sepuluh PR yang datang bersamaan akan mengantre. Jika pipeline Anda membagi tes ke 16 worker, ini bukan alat yang tepat untuk pipeline utama — tetap jalankan itu di runner Anda sendiri pada VPS dan gunakan sandbox untuk jalur yang tidak tepercaya.

Tanpa kontainer di dalam. Docker tidak tersedia di sandbox. Tes unit dan integrasi yang membutuhkan kontainer Postgres tidak akan berjalan apa adanya; tes terhadap SQLite atau tiruan di memori akan berjalan.

File. Unggahan dan unduhan lewat API maksimal 5 MB per file. Ambil kode dengan git di dalam sandbox daripada mengunggah arsip.

Berapa biayanya

Anda membayar vCPU dan RAM tarif per detik, minimal 60 detik, dari saldo prabayar — tanpa langganan.

EksekusiTarifPerkiraan biaya
Lint + tes unit, 1 mntsmall (0.5 vCPU, 1 GB)$0.0006
Suite lengkap, 3 mntstandard (1 vCPU, 2 GB)$0.0033
Build + tes, 10 mntplus (2 vCPU, 4 GB)$0.022

Dengan harga seperti ini, pertanyaan yang menarik bukan biayanya, melainkan apakah tes Anda selesai dalam waktu yang Anda tetapkan. Beri TTL sedikit ruang di atas eksekusi hijau Anda yang paling lambat.

Pembagian yang masuk akal

Rekomendasi kami: biarkan branch tepercaya di runner cepat Anda yang punya cache. Lewatkan dulu lewat sandbox semua yang tidak Anda tulis sendiri — fork, kontributor eksternal, patch buatan agen. Jika eksekusi di sandbox hijau dan seorang manusia sudah melihat diff-nya, naikkan ke pipeline tepercaya.

Dengan begitu Anda punya satu jalur tempat kecepatan dan cache penting, dan satu lagi tempat mesin yang bersih penting, tanpa memaksa satu alat menjadi keduanya.

Mulailah dari ikhtisar sandbox dan panduan koneksi — akun baru mendapat $1 waktu sandbox, cukup untuk beberapa ratus eksekusi tes singkat. Setiap metode yang dipakai di atas ada di referensi SDK, dan aturan penagihan yang persis ada di batas dan penagihan sandbox.

Terkait: sandbox untuk code review dan pemeriksaan PR dan sandbox untuk agen AI.

Siap deploy? Bayar dengan kripto, tanpa KYC — online dalam sekitar satu menit.

Deploy →

Pertanyaan umum

Mengapa tidak menjalankan pull request yang tidak tepercaya di runner self-hosted saya sendiri?

Runner self-hosted menyimpan state di antara job dan biasanya memegang kunci deploy atau kredensial cloud. Pull request dari orang yang tidak Anda kenal bisa membacanya dalam satu langkah. Sandbox selalu mulai bersih dan tidak berisi apa pun selain kode yang diuji.

Bisakah satu tes berjalan lebih dari 55 detik?

Bisa. Batas 55 detik berlaku per perintah sinkron. Mulai test suite sebagai tugas latar belakang, ambil output-nya secara berkala, dan tes bisa berjalan sampai masa hidup sandbox berakhir — hingga 24 jam untuk sandbox sementara.

Berapa banyak eksekusi tes yang bisa berjalan paralel?

Hingga 20 sandbox per akun, tetapi hanya 2 perintah yang dieksekusi bersamaan per akun. Untuk CI, artinya dua job benar-benar berjalan bersamaan; sisanya mengantre. Jika Anda butuh sharding paralel yang lebar, armada runner di VPS lebih cocok.

Apakah Docker tersedia di dalam sandbox?

Sandbox menyertakan Python 3.12, Node.js 22, bash, git, dan curl, dan Anda menginstal dependensi dengan pip atau npm. Docker tidak termasuk — jika tes Anda menjalankan kontainer, jalankan di runner pada VPS.

Berapa biaya satu eksekusi?

Per detik, minimal 60 detik, untuk vCPU dan RAM tarif. Eksekusi tiga menit pada tarif standard (1 vCPU, 2 GB) berbiaya sekitar $0.0033.

Komentar

Belum ada komentar. Jadilah yang pertama.

Tinggalkan komentar

Komentar dimoderasi sebelum muncul.