Runner za CI za self-hosted zina tabia moja isiyopendeza: zinakumbuka kila kitu. Cache, token, ufunguo wa deploy ambao mtu aliuongeza "kwa muda" masika yaliyopita. Kwa matawi yako mwenyewe hilo halina shida. Tatizo linaanza pale pull request inapofika kutoka kwa mtu ambaye hujawahi kumsikia — au kutoka kwa wakala wako mwenyewe wa AI, aliyeandika kiraka ambacho bado hakuna aliyekisoma.
Jibu safi ni mashine moja kwa kila mzunguko. Clone, sakinisha, jaribu, tupa mashine.
Mzunguko unavyoonekana
Sandbox ni microVM ya Firecracker inayowaka ndani ya takriban sekunde moja ikiwa na Python 3.12, Node.js 22, git na curl. Intaneti ya kutoka inafanya kazi, kwa hiyo git clone na pip install -r requirements.txt zinafanya kazi kama kawaida. Hakuna porti za kuingia — hakuna kinachoweza kuunganishwa na mazingira ya majaribio yanapoendelea.
Kutoka kwenye kazi ya CI, yote ni hati fupi. Hii hapa ikitumia SDK ya Python, inayoitwa kutoka kazi yoyote ya 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 inakaa kwenye siri za CI yako kama EQVPS_API_KEY. Hakuna kingine kutoka CI yako — wala funguo za deploy, wala vitambulisho vya wingu — kinachoingia kwenye sandbox. Kizuizi cha with kinapoisha, sandbox inafutwa, hata kama kazi ilianguka katikati.
Mzunguko wa majaribio wenyewe ni kazi ya chinichini, kwa sababu amri moja ya sinkroni inasimama kwenye sekunde 55. Kazi ya chinichini hutiririsha matokeo inapofanya kazi na inaweza kuendelea hadi TTL ya sandbox — hapa imewekwa dakika 30 ili jaribio lililokwama lisipandishe bili.
Mipaka utakayokutana nayo kweli
Kuwa wazi kuhusu hii kunakuokolea mchana mzima.
Kuendesha kwa wakati mmoja. Akaunti inaweza kushikilia sandbox 20, lakini amri 2 tu zinatekelezwa kwa wakati mmoja. Kwa CI hizo ni kazi mbili zinazoendeshwa sambamba kweli. PR kumi zinazofika pamoja zitapanga foleni. Ikiwa pipeline yako inagawa majaribio kwa worker 16, hiki si chombo sahihi kwa pipeline kuu — iache kwenye runner zako mwenyewe kwenye VPS na tumia sandbox kwa njia isiyoaminika.
Hakuna kontena ndani. Docker haiji na sandbox. Majaribio ya kitengo na ya ujumuishaji yanayohitaji kontena la Postgres hayatafanya kazi kama yalivyo; majaribio dhidi ya SQLite au kibadala cha kumbukumbu yatafanya kazi.
Faili. Kupakia na kupakua kupitia API ni hadi MB 5 kwa kila faili. Vuta msimbo kwa git ndani ya sandbox badala ya kupakia faili iliyobanwa.
Gharama yake
Unalipia vCPU na RAM ya ushuru kwa sekunde, kiwango cha chini sekunde 60, kutoka salio la kulipia kabla — bila usajili.
| Mzunguko | Ushuru | Gharama ya takriban |
|---|---|---|
| Lint + majaribio ya kitengo, dak 1 | small (0.5 vCPU, 1 GB) | $0.0006 |
| Seti kamili, dak 3 | standard (1 vCPU, 2 GB) | $0.0033 |
| Build + majaribio, dak 10 | plus (2 vCPU, 4 GB) | $0.022 |
Kwa bei hizi swali la kuvutia si gharama, bali ni kama majaribio yako yanamaliza ndani ya muda uliouweka. Ipe TTL nafasi kidogo juu ya mzunguko wako wa kijani wa polepole zaidi.
Mgawanyo wa busara
Pendekezo letu: acha matawi yanayoaminika kwenye runner yako ya haraka yenye cache. Pitisha kwanza kwenye sandbox kila kitu ambacho hukuandika wewe — fork, wachangiaji wa nje, viraka vilivyozalishwa na mawakala. Mzunguko wa sandbox ukiwa wa kijani na binadamu ameangalia diff, upandishe kwenye pipeline inayoaminika.
Hivyo unakuwa na njia moja ambapo kasi na cache ni muhimu, na nyingine ambapo mashine safi ni muhimu, bila kulazimisha chombo kimoja kuwa vyote viwili.
Anza na muhtasari wa sandbox na mwongozo wa kuunganisha — akaunti mpya hupata $1 ya muda wa sandbox, inayotosha mizunguko mifupi mia kadhaa. Kila mbinu iliyotumika hapo juu iko kwenye marejeo ya SDK, na kanuni kamili za malipo ziko kwenye mipaka na malipo ya sandbox.
Zinazohusiana: sandbox kwa ukaguzi wa msimbo na ukaguzi wa PR na sandbox kwa mawakala wa AI.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.