−25%

kwa Windows ya mwaka, hadi 31 Okt. Tazama mipango

EQVPS
Anza

Sandbox kwa CI: majaribio yaliyotengwa kwa chini ya senti moja kila mzunguko

Endesha majaribio ya msimbo usioumini — pull request kutoka kwa mgeni, kiraka kilichozalishwa — ndani ya microVM mpya inayofutwa baada ya mzunguko. Malipo kwa sekunde, SDK ya Python na TS, na uwazi kuhusu mipaka ya kuendesha kwa wakati mmoja.

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.

MzungukoUshuruGharama ya takriban
Lint + majaribio ya kitengo, dak 1small (0.5 vCPU, 1 GB)$0.0006
Seti kamili, dak 3standard (1 vCPU, 2 GB)$0.0033
Build + majaribio, dak 10plus (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.

Uko tayari kusambaza? Lipa kwa crypto, bila KYC — hai kwa takriban dakika moja.

Sambaza sasa →

Maswali

Kwa nini nisiendeshe pull request zisizoaminika kwenye runner yangu ya self-hosted?

Runner ya self-hosted huhifadhi hali kati ya kazi na kwa kawaida hushikilia funguo za deploy au vitambulisho vya wingu. Pull request kutoka kwa mtu usiyemjua inaweza kuvisoma kwa hatua moja. Sandbox huanza safi kila mara na haina chochote isipokuwa msimbo unaojaribiwa.

Je, jaribio linaweza kuchukua zaidi ya sekunde 55?

Ndiyo. Kikomo cha sekunde 55 ni kwa kila amri ya sinkroni. Anzisha seti ya majaribio kama kazi ya chinichini, chukua matokeo yake mara kwa mara, na itaweza kuendelea hadi muda wa maisha ya sandbox uishe — hadi saa 24 kwa sandbox ya muda.

Ni mizunguko mingapi ya majaribio inaweza kwenda sambamba?

Hadi sandbox 20 kwa kila akaunti, lakini amri 2 tu zinazotekelezwa kwa wakati mmoja kwa kila akaunti. Kwa CI hiyo inamaanisha kazi mbili zinazoendeshwa kweli kwa wakati mmoja; zilizobaki zinasubiri foleni. Ukihitaji kugawanya majaribio sambamba kwa upana, kundi la runner kwenye VPS linafaa zaidi.

Je, Docker inapatikana ndani ya sandbox?

Sandbox ina Python 3.12, Node.js 22, bash, git na curl, na vitegemezi unavisakinisha kwa pip au npm. Docker si sehemu yake — ikiwa majaribio yako yanaanzisha kontena, yaendeshe kwenye runner iliyo kwenye VPS.

Mzunguko mmoja unagharimu kiasi gani?

Kwa sekunde, kiwango cha chini sekunde 60, kwa vCPU na RAM ya ushuru. Mzunguko wa dakika tatu kwenye ushuru wa standard (1 vCPU, 2 GB) unagharimu takriban $0.0033.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.