Tesztgép adása egy ügynöknek
Az állomás egy eldobható gép, amelyet az ügynök akkor nyit meg, amikor tényleg ki kell próbálnia valamit: be kell töltenie egy oldalt, végig kell kattintania egy asztali alkalmazást, körbe kell tapogatnia egy telefont. Valós időben figyelheti, ahogy dolgozik, és bármikor átveheti a vezérlést.
Az elszigetelt terminál-, böngésző- és asztali állomások eldobható lemezzel és szabályozott hálózattal rendelkező VM-ek. Az Android és az iOS gazdagép által kezelt emulátorok: az eszköz állapota eldobható, a hálózatuk viszont a szerver gazdagépét követi.
Egyszeri beállítás
Szekció neve “Egyszeri beállítás”Az állomások a cc_server-t futtató gépen futnak — ugyanazon a gépen, nem azon,
amelyet éppen néz. Öt felhasználói felület létezik; az asztali és a mobil
felületek gazdagépoldali beállítást igényelnek:
| Felület | Ezen fut | Beállítás |
|---|---|---|
| Terminál (VM) | Egy microVM, amely egy rögzített Ubuntu-képről indul | Nincs — a képet az első használatkor automatikusan letölti |
| Böngésző (VM) | Egy microVM, amely egy rögzített Debian-képről indul, és az első használatkor telepíti a Chromiumot, a Firefoxot vagy a WebKitet | Nincs — ugyanaz |
| Számítógép (VM) | QEMU egy Linuxos asztali képpel, amely Chromiumot, Firefoxot, WebKitet és egy GitHub által üzemeltetett runnerhez hasonló parancssori alapeszközkészletet tartalmaz | Telepítse a QEMU-t (brew install qemu), majd az Importálás paranccsal töltsön be egy asztali képet a Beállítások → Szerver → Állomások alatt |
| Android | A Google Android-emulátora | Telepítse az Android SDK-t, hozzon létre egy AVD-t, és indítsa el (lásd alább) |
| iOS-szimulátor | CoreSimulator a szerver Mac gépén | Telepítse az Xcode-ot és a kért iOS-futtatókörnyezetet, majd telepítse az automatizálási hidat a Beállítások → Szerver → Állomások alatt |
A terminál- és böngészőgépek digesttel rögzített képekből indulnak: a pontos bájtok előre meg vannak nevezve, az első indításkor egyszer töltődnek le, és gyorsítótárba kerülnek — miután mindegyik fajtából egyszer elindult egy gép, a későbbiek teljesen kihagyják a letöltést, és másodpercek alatt elindulnak. A Beállítások → Szerver → Állomások megmutatja, mit tud a szervere indítani, és minden gépet, amely éppen fut.
Egy telepített asztali kép ugyanerről az oldalról kezelhető: az Importálás lecseréli egy újabb qcow2-re, a Törlés pedig eltávolítja, így friss buildet telepíthet.
A mobileszközök beállítása más
Szekció neve “A mobileszközök beállítása más”Az Androidhoz és az iOS-hez nincs saját képünk, és ez nem kihagyás. Az Android rendszerképei a Google SDK-jából származnak; az iOS-futtatókörnyezetek az Xcode-ból. Androidhoz telepítse az Android Studiót (vagy a parancssori SDK-eszközöket), adjon hozzá egy virtuális eszközt a Device Manager alatt, és indítsa el. Az Állomások oldal ezután az Androidot elérhetőként jelenti.
Azt is pontosan megmondja, melyik lépés hiányzik — nincs SDK, nincs emulátor,
nincs virtuális eszköz, vagy az eszköz egyszerűen nem fut —, mert ezeknek négy
különböző javítása van, és közülük csak az egyik letöltés. Ha a cc_server-t
olyan shellből indítja, amely nem látja az SDK-t, exportálja:
export ANDROID_HOME="$HOME/Library/Android/sdk"iOS esetén magának a szervernek kell macOS-en futnia, telepített Xcode-dal és iOS-szimulátor-futtatókörnyezettel. Nyissa meg a Beállítások → Szerver → Állomások oldalt, és nyomja meg az iOS-automatizálási híd telepítése gombot. A szerver letölti az ellenőrzőösszeggel rögzített WebDriverAgent csomagot, ellenőrzi, és telepíti a szerver tulajdonában lévő automatizálási tárolóba. A beállítás során egyetlen szimulátor sem indul el.
Gép megnyitása
Szekció neve “Gép megnyitása”A gépek fülekként élnek, a csevegés és a diff mellett — egy térben vagy egy
PR-oldalon, ugyanabban a + menüben, a Gépek alatt:
- Számítógép — Linuxos asztal Chromiummal, Firefoxszal és WebKittel
- Chromium, Firefox vagy WebKit — egy böngésző
- Android — a futó Android-emulátor
- iOS-szimulátor — egy eldobható szimulátor, amelyet ehhez a beszélgetéshez hoz létre
Válasszon egyet, és nyomja meg a Gép indítása gombot. A fül megmondja, hogy az indítás melyik szakaszban tart („A microVM indítása”, „Várakozás a vendéggép indulására”), ahelyett hogy csak pörögne.
A fül a beszélgetéshez van rendelve, és az ügynökeszköz is. Egy Chromium-,
Firefox- vagy WebKit-fül és a browser_use, az Android és a mobile_use, vagy
az iOS-szimulátor és az ios_use ugyanazt az alapértelmezett gépet szólítja
meg. A további felületi helyek külön összehasonlítógépek; az ügynökeszközök
mindig az alapértelmezettet használják.
Flutter-alkalmazás Androidon való buildelése, telepítése és indítása:
fvm flutter build apk --debugEzután hívja meg a mobile_use eszközt az install_apk művelettel és a
build/app/outputs/flutter-apk/app-debug.apk útvonallal, majd a start_app
műveletet az Android csomagnévvel. A ui_dump, a képernyőképek és a bemenet
ugyanazt az eszközt vezérlik, amely az emberi fülön látható. A stop_app, a
clear_app_data, az uninstall_app, az open_url és az argv alakú shell
hívások a fejlesztési ciklus többi részét is lefedik anélkül, hogy shellt
indítanának a szerver gazdagépén.
Flutter-alkalmazás buildelése, telepítése és indítása iOS-szimulátoron:
fvm flutter build ios --simulator --debug/usr/bin/plutil -extract CFBundleIdentifier raw -o - \ build/ios/iphonesimulator/Runner.app/Info.plistEzután hívja meg az ios_use eszközt az install_app művelettel és a .app
könyvtárral, majd a start_app műveletet a plutil által kiírt
bundle-azonosítóval. Az iOS-eszköz emellett elérhetővé teszi a stop_app, az
uninstall_app és az open_url műveletet, valamint egy argv alakú spawn
műveletet a szimulátoron belüli diagnosztikához.
Az asztali és a böngészős megjelenítés a panelhez igazodik. Az iOS megtartja a szimulátor rögzített pontméretét, és fekete sávokkal tölti ki a maradék helyet. Minden felületnek továbbra is két független sávja van: az ügynök kicsi, olcsó képernyőképeket kap, Ön pedig az élő képet. A fülek váltása leállítja az emberi adatfolyamot, így egy háttérben futó gép nem foglal megjelenítési sávszélességet.
Egy állomásfül önmagától nem indít gépet, az elrendezés visszaállítása közben sem. Ez a szabály akadályozza meg, hogy egy alkalmazásindítás váratlanul VM-eket indítson vagy szimulátoroszközöket hozzon létre.
A gép irányítása
Szekció neve “A gép irányítása”A vászon az Öné: bármikor gépelhet és kattinthat bele, amikor a kizárólagos vezérlést éppen senki más nem tartja — vagy amikor Ön tartja. Amíg Ön tartja a zárat, az állapotjelző címke Ön irányít feliratot mutat, az ügynök továbbra is készíthet képernyőképeket, a szerver viszont azon az egyetlen kapun utasítja el a módosító műveleteit, amelyen minden művelet átmegy. Mindent, amit tesz, az Ön neve alatt rögzítünk.
Ha végzett, nyomja meg a Gép leállítása gombot.
A vezérlés szándékosan kizárólagos: ha ketten gépelnek ugyanabba a gépbe, abból olyan bemenet lesz, amelyet egyikük sem szánt.
Tartalom be- és kijuttatása
Szekció neve “Tartalom be- és kijuttatása”A másolás és a beillesztés mindkét irányban működik az állomás vásznán, ahogy a fájlok behúzása is.
Másolás és beillesztés. Nyomja le a másolási billentyűkombinációt a vászon fölött, és mindaz, amit a gép másolt — szöveg, kép, fájllista —, az Ön vágólapjára kerül. A beillesztés a sajátját küldi a másik irányba, és beillesztést nyom le a gépen belül. macOS-en a kombináció a ⌘C/⌘V; a ⌃C továbbra is megszakításként érkezik a vendéggép shelljébe. Windowson és Linuxon a ⌃C/⌃V használatos — a vendéggép ugyanazt a leütést kapja, mint egyébként, így a ⌃C a vendég termináljában továbbra is megszakít, és az Ön vágólapja érintetlen marad.
A háttérben semmi sem szinkronizálódik. Egy jelszó, amelyet a saját gépén másol ki, nem azért érkezik meg egy VM belsejébe, mert lejárt egy időzítő; akkor lép át, amikor beilleszti.
Az állomásra való beillesztés alapértelmezés szerint engedélyezett. Az állomásról kifelé másolás előbb rákérdez — tízperces engedély, vagy Mindig engedélyez a Beállítások → Szerver → Állomások → Vágólap-hozzáférés alatt. A két irány független, és Önt követi, nem a munkaterületet.
Fájlok behúzása. Ejtse el őket bárhol a vásznon.
- A Böngésző (VM) esetén az oldal valódi drop eseményt kap azon a ponton, ahol elengedi, így a feltöltési zóna pontosan úgy viselkedik, mintha helyi fájl lenne.
- A Számítógép (VM) esetén a fájlok a
~/Dropsmappába kerülnek, az elérési útjaik pedig a gép vágólapjára, így a ⌃V beilleszti őket egy fájlkezelőbe vagy egy feltöltési mezőbe. A gazdagép nem tud húzást szintetizálni egy tetszőleges Linuxos alkalmazásba anélkül, hogy privilegizált démont futtatna a VM belsejében, ami viszont szándékosan nincs az állomásokon — ezért az értesítés megmondja, hová kerültek a fájlok, ahelyett hogy úgy tenne, mintha megtörtént volna egy drop. - Egy terminál esetén a fájl bekerül a gépbe, az elérési útja pedig beíródik a promptba, készen arra, hogy egy parancsnak átadja. Ha egy képet illeszt be egy terminálba, ugyanez történik: elmentődik a gépben, és megkapja az elérési útját.
Fájlok kihúzása a Számítógép (VM) esetén működik. Kezdjen el húzni egy fájlt a gépen belül, vigye ki a mutatót a vászonról, és az valódi húzássá válik az asztalán — ejtse el a Finderben vagy az Explorerben. Az is működik, ha a gép fájlkezelőjében másol fájlokat, és az Ön oldalán illeszti be. A Böngésző (VM) ezt nem kínálja: egy headless böngészőnek nincs olvasható húzáscsomagja, és ha az oldal szövegkijelöléséből találgatnánk, az eltérítené a hétköznapi kattintásokat.
Terminálok egy állomáson belül
Szekció neve “Terminálok egy állomáson belül”A térben vagy egy PR-oldalon lévő terminálok az állomáson belül is futhatnak a szerver saját gépe helyett. Ilyenkor a panel egy Elszigetelt VM jelvényt mutat.
Mi változik:
- Semmi, amit futtat, nem éri el a gazdagépet. Egy
rm -rfodabent az állomásba kerül. - A hálózat alapértelmezés szerint tilt. Csak az állomás engedélyezési listáján szereplő hosztok érhetők el, és minden egy olyan kapun megy át, amely kikényszeríti ezt a listát.
- A
git pushtovábbra is működik az Ön által megnyitott terminálban. Az állomás nem tárol hitelesítő adatot; műveletenként egy rövid életű tokent kér a szervertől, amelyet az Ön saját kódhosting-hozzáférése korlátoz, és amely az állomás bezárásakor visszavonásra kerül. Egy ügynök által megnyitott állomás csak olvasásra jogosult hitelesítő adatot kap, így fetchelni tud, pusholni nem.
Amit érdemes tudni:
- A visszaállított elszigetelt terminál Önre vár. Az állomásfülhöz hasonlóan
egy
microvmterminál, amely az elrendezésével együtt tér vissza, egy Shell megnyitása gombot mutat, ahelyett hogy indításkor elindítaná a VM-jét. Egy gazdagép-shell terminál egy folyamatba kerül; egy elszigetelt egy gépbe. - A terminálra ejtett fájlok beíródnak, nem megnyílnak. Ejtse el a CSV-t egy elszigetelt terminálon, és az bekerül a gépbe, a vendéggépbeli elérési útja pedig megjelenik a promptban — a gazdagépbeli út egy olyan parancs lenne, amely ott hibára fut.
- Az állomáson lévő másolat másolat. A gazdagépen lévő worktree marad a
mérvadó. Az állomáson belül készített commitokat akkor viszi vissza a
refs/rigs/<id>/*alá, amikor Ön kéri — soha nem mozdítják el az ágát, és nem nyúlnak a munkakönyvtárához. - A gazdagépre irányuló munka továbbra is a gazdagépen fut. Egy Linuxos
vendéggép nem tud macOS-re buildelni, és nem tud
xcodebuild-et futtatni. Ehhez válassza ki kifejezetten a natív háttérrendszert; az alkalmazás megerősítést kér, ahelyett hogy csendben átváltana.
Portok
Szekció neve “Portok”Indítson egy devszervert a Terminál (VM) felületen — mondjuk a pnpm dev
parancsot a 3000-es porton —, és néhány másodpercen belül kigyullad a terminál
sarkában lévő dugaszikon: a port továbbítódik a gépén a localhost:3000
címre, elérhető a localhost:3000 címen a Böngésző (VM) belsejéből,
megosztható a hálózatán, és elnevezhető https://myapp.test néven. A teljes
folyamat — az automatikus továbbítás, a LAN-megosztás, a HTTPS-sel működő
dev-tartományok — külön útmutatót kapott:
Portok továbbítása terminálból.
Egyéni képek
Szekció neve “Egyéni képek”Egy munkaterület a saját képeire irányíthatja a Terminál (VM) és a Böngésző (VM) felületet — a Beállítások → Szerver → Állomások → Egyéni képek (ez a munkaterület) alatt. Tipikus használat: bővítse az alapértelmezett képet a projektjéhez szükséges eszközkészlettel, hogy minden terminál készen álljon az indulásra, vagy használja újra egy olyan képet, amelyet a csapata már publikál.
A gép továbbra is ugyanabban az elszigetelt környezetben indul: ugyanaz a kimenőforgalom-kapu, ugyanaz a hitelesítőadat-közvetítő, ugyanaz az életciklus. A beállítást csak a munkaterület adminisztrátorai módosíthatják, az új gépek átveszik (a futók megtartják a sajátjukat), a hivatkozásnak pedig registrybeli képnek kell lennie — a helyi elérési utakat elutasítjuk.
Mit kell egy képnek nyújtania:
- Terminál (VM) — Linuxos kép
bash-sal. Emellett szüksége van agit, acurlés asocateszközre — vagy előre telepítve, vagy az első indításkor telepíthetően (bármely Debian/Ubuntu-alapú kép megfelel: ezek automatikusan telepítésre kerülnek, egy GitHub által üzemeltetett runnerhez hasonló parancssori eszközkészlettel együtt: fordítók, Python 3,jq, archiváló eszközök,rsync. A Node/Go/Java típusú nyelvi futtatókörnyezetek és a Docker nincsenek előre telepítve). A7911-es vendégport a porttovábbítónak van fenntartva. - Böngésző (VM) — Debian/Ubuntu-kép
bash-sal éssocat-tal, valamint egychromiumbináris. A szerver maga indítja el a Chromiumotchromium --headless=newformában, és a DevTools csatornát a9223-as vendégportról a9222-re továbbítja. A PulseAudio és az ffmpeg az első indításkor telepítésre kerül. Ne építsenFROM chromedp/headless-shellalapra — annak a binárisnak nincs hangja. A felülírás csak a Chromium-állomásokra vonatkozik; a Firefox és a WebKit figyelmen kívül hagyja, és a rögzített Debian-képből indul. A9222/9223vendégportok fenntartottak.
Két javaslat: rögzítse a hivatkozást digesttel (@sha256:…), hogy a bájtok ne
változhassanak meg Ön alatt, és tartsa a képet a Docker Hubon vagy a GitHub
Container Registryben — ezeknek a registryknek a letöltési hosztjait a
kimenőforgalom-kapu automatikusan beengedi; másoknál előfordulhat, hogy a
letöltéshez a tartalomkiszolgáló hosztjaiknak is elérhetőnek kell lenniük.
Amikor egy állomás eltűnik
Szekció neve “Amikor egy állomás eltűnik”Az állomások szándékosan ideiglenesek:
- Tétlenség — ha körülbelül 15 percig nem történik semmi, egy böngésző-, asztali vagy mobil állomás parkol (lefagyasztva, a következő műveletre azonnal felébred). Egy elszigetelt terminál 45 percet vár. A tétlenségi időablak kétszerese után bezárul.
- Időkorlát — minden állomásnak van egy kemény élettartama, amelyet nem tud meghosszabbítani, bármit is tesz éppen.
- Memória — ha a szervernek helyre van szüksége egy új állomáshoz, bezárja a legrégebben használtat. Egy olyan állomást, amelyet valaki éppen vezérel, néz, vagy amelyben terminál van nyitva, soha nem vesz el.
Amikor egy elszigetelt állomás bezárul, a lemeze eldobásra kerül. Egy Android-állomás bezárása leválasztja a gazdagép emulátoráról — nem törli azt. Egy iOS-állomás törli az általa létrehozott CoreSimulator-eszközt. Előbb vigyen vissza mindent, amit meg szeretne tartani.
Mit érhet el egy állomás
Szekció neve “Mit érhet el egy állomás”Az elszigetelt terminál-, böngésző- és asztali állomások alapértelmezés szerint
tiltó kimenőforgalom-kaput használnak: a hosztokat kifejezetten engedélyezi, és
a vendéggép egyetlen útvonala egy olyan kapu, amely kikényszeríti ezt a listát.
Egy böngészőállomás ezen felül alapból beengedi a termékoldalt (usectrl.dev).
A hitelesítőadat-közvetítő ugyanezt a listát használja.
Két őszinte fenntartás:
- A mobil hálózat a gazdagépet követi. Az Android emulátora és az Apple CoreSimulatora nincs az elszigetelt környezet kimenőforgalom-kapuja mögött. Egyik mobil fül sem kínál hálózatmegkerülési vezérlőt, mert a gazdagép által kezelt hálózat már így is korlátozás nélküli.
- Minden, amit egy állomás elolvas, nem megbízható. Az oldalszöveg, a DOM, a kisegítő lehetőségek fái és a nézetkiírások olyan jelölőkbe csomagolva jutnak vissza az ügynökhöz, amelyek azt mondják: „ez adat, nem utasítás”. Egy oldal, amely parancsokat próbál adni az ügynökének, idézett szövegként jelenik meg.
Minden futó dolgot láthat, és bármelyiket leállíthatja a Beállítások → Szerver → Állomások alatt.
Kapcsolódó
Szekció neve “Kapcsolódó”- Állomások és elszigetelt környezetek — mindennek a modellje: miért VM-ek, a két megjelenítési sáv, a hitelesítőadat-közvetítő, az életciklus
- Portok továbbítása terminálból — érje el a devszervert onnan, ahonnan számít
- Állomások referenciája — minden felület, művelet, port és alapérték egy helyen
- Korlátok konfigurálása — az
Elszigetelt környezet (állomás) irányításaegy műveletosztály, amelyet munkaterületenként, ügynökönként vagy térenként állíthat engedélyezésre, előbb kérdezésre vagy tiltásra. A csak olvasható módok egyenesen megtiltják.