Self-hosted CI runner'larının can sıkıcı bir özelliği var: her şeyi hatırlarlar. Önbellekler, token'lar, birinin geçen bahar "geçici olarak" eklediği bir deploy anahtarı. Kendi branch'leriniz için sorun değil. Sorun, adını hiç duymadığınız birinden — ya da henüz kimsenin okumadığı bir yamayı yazan kendi yapay zekâ ajanınızdan — bir pull request geldiği anda başlar.
Temiz çözüm, her koşu için bir makine. Klonla, kur, test et, makineyi at.
Bir koşu nasıl görünür
Sandbox, Python 3.12, Node.js 22, git ve curl ile yaklaşık bir saniyede açılan bir Firecracker microVM'dir. Giden internet çalışır, dolayısıyla git clone ve pip install -r requirements.txt her zamanki gibi davranır. Gelen port yoktur — test ortamı çalışırken hiçbir şey ona dışarıdan bağlanamaz.
Bir CI işinden bakınca hepsi kısa bir betik. Herhangi bir CI işinden çağrılan Python SDK'sı ile şöyle:
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 gizli değişkenlerinizde EQVPS_API_KEY olarak durur. CI'nızdan başka hiçbir şey — ne deploy anahtarları ne bulut kimlik bilgileri — sandbox'a girmez. with bloğu bittiğinde sandbox silinir; iş yarıda çökse bile.
Test koşusunun kendisi bir arka plan görevidir, çünkü tek bir senkron komut 55 saniyede durur. Arka plan görevi çalışırken çıktısını akıtır ve sandbox'ın TTL'sine kadar devam edebilir — burada 30 dakikaya ayarlandı, böylece takılan bir test faturayı şişiremez.
Gerçekten karşılaşacağınız sınırlar
Bunları açıkça söylemek size bir öğleden sonra kazandırır.
Eşzamanlılık. Bir hesap 20 sandbox tutabilir, ama yalnızca 2 komut aynı anda çalışır. CI için bu, gerçekten paralel çalışan iki iş demek. Aynı anda gelen on PR sıraya girer. Pipeline'ınız testleri 16 worker'a bölüyorsa, ana pipeline için doğru araç bu değil — onu bir VPS üzerindeki kendi runner'larınızda tutun, sandbox'ları güvenilmeyen şerit için kullanın.
İçeride konteyner yok. Docker sandbox'la birlikte gelmez. Postgres konteynerine ihtiyaç duyan birim ve entegrasyon testleri olduğu gibi çalışmaz; SQLite'a ya da bellek içi bir sahte nesneye karşı koşan testler çalışır.
Dosyalar. API üzerinden yükleme ve indirme dosya başına 5 MB'a kadardır. Arşiv yüklemek yerine kodu sandbox içinde git ile çekin.
Maliyeti
Tarifenin vCPU ve RAM'i için saniye başına, en az 60 saniye, ön ödemeli bakiyeden ödersiniz — abonelik yok.
| Koşu | Tarife | Yaklaşık maliyet |
|---|---|---|
| Lint + birim testleri, 1 dk | small (0.5 vCPU, 1 GB) | $0.0006 |
| Tam paket, 3 dk | standard (1 vCPU, 2 GB) | $0.0033 |
| Derleme + testler, 10 dk | plus (2 vCPU, 4 GB) | $0.022 |
Bu fiyatlarda ilginç soru maliyet değil, testlerinizin belirlediğiniz süre içinde bitip bitmediğidir. TTL'ye en yavaş yeşil koşunuzun biraz üstünde pay bırakın.
Makul bir ayrım
Önerimiz: güvenilir branch'leri önbellekli, hızlı runner'ınızda tutun. Sizin yazmadığınız her şeyi — fork'lar, dış katkıcılar, ajanların ürettiği yamalar — önce bir sandbox'tan geçirin. Sandbox koşusu yeşilse ve bir insan diff'e baktıysa, onu güvenilir pipeline'a terfi ettirin.
Böylece hız ve önbelleğin önemli olduğu bir şeridiniz, temiz makinenin önemli olduğu başka bir şeridiniz olur; tek bir aracı ikisi birden olmaya zorlamadan.
Sandbox'lara genel bakış ve bağlantı kılavuzu ile başlayın — yeni hesaplar $1 sandbox süresi alır, bu da birkaç yüz kısa test koşusuna yeter. Yukarıda kullanılan her yöntem SDK başvurusunda, kesin faturalama kuralları ise sandbox sınırları ve faturalama bölümünde.
İlgili: kod incelemesi ve PR kontrolleri için sandbox ve yapay zekâ ajanları için sandbox.
Yorumlar
Henüz yorum yok. İlk olun.