−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

CI için sandbox: çalıştırma başına bir sentten ucuza izole test koşuları

Güvenmediğiniz kodun testlerini — bir yabancının pull request'i, üretilmiş bir yama — çalıştırmadan sonra silinen yepyeni bir microVM'de koşturun. Saniye bazında faturalama, Python ve TS SDK'sı ve eşzamanlılık sınırları hakkında açık sözlülük.

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şuTarifeYaklaşık maliyet
Lint + birim testleri, 1 dksmall (0.5 vCPU, 1 GB)$0.0006
Tam paket, 3 dkstandard (1 vCPU, 2 GB)$0.0033
Derleme + testler, 10 dkplus (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.

Dağıtmaya hazır mısınız? Kripto ile ödeyin, KYC yok — yaklaşık bir dakikada çevrimiçi.

Dağıt →

SSS

Güvenilmeyen pull request'leri neden kendi self-hosted runner'ımda çalıştırmayayım?

Self-hosted runner, işler arasında durumu saklar ve genellikle deploy anahtarları ya da bulut kimlik bilgileri barındırır. Tanımadığınız birinin pull request'i bunları tek adımda okuyabilir. Sandbox ise her seferinde temiz başlar ve test edilen koddan başka hiçbir şey içermez.

Bir test 55 saniyeden uzun sürebilir mi?

Evet. 55 saniyelik sınır, tek bir senkron komut içindir. Test paketini arka plan görevi olarak başlatın, çıktısını sorgulayın; sandbox'ın ömrü bitene kadar çalışabilir — geçici bir sandbox için en fazla 24 saat.

Kaç test koşusu paralel çalışabilir?

Hesap başına 20 sandbox'a kadar, ama hesap başına aynı anda yalnızca 2 komut çalışır. CI için bu, gerçekten eşzamanlı çalışan iki iş demektir; gerisi sıraya girer. Geniş paralel sharding gerekiyorsa VPS üzerindeki bir runner filosu daha uygundur.

Sandbox içinde Docker var mı?

Sandbox'ta Python 3.12, Node.js 22, bash, git ve curl bulunur; bağımlılıkları pip veya npm ile kurarsınız. Docker buna dahil değildir — testleriniz konteyner başlatıyorsa bunları bir VPS runner'ında çalıştırın.

Bir koşu ne kadar tutar?

Tarifenin vCPU ve RAM'i için saniye başına, en az 60 saniye. standard tarifesinde (1 vCPU, 2 GB) üç dakikalık bir koşu yaklaşık $0.0033 tutar.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.