A különféle kurzus-tooling Docker-image-ként van élesítve.
A tooling minden egyes darabjához szükség van egy Dockerfile-ra, amely meghatározza, hogyan épül fel a gép.
A repositoryd gyökérkönyvtárában kell lennie, és Dockerfile legyen a neve.
A Dockerfile-nak a lehető legkisebb image-et kell létrehoznia, amelyre a toolingnak a helyes és gyors működéshez szüksége van. A Bevált gyakorlatok oldalunk rengeteg tippet kínál, amelyek segítenek elérni ezt a célt.
A tesztfuttató minden megoldáshoz egy 20 másodperces időablakra 100% CPU-t és 3 GB memóriát kap. 20 másodperc után a folyamat leáll, és időtúllépést jelent a 408-as hibakóddal.
Erősen ajánljuk, hogy kövesd a Teljesítményre vonatkozó bevált gyakorlatok dokumentumunkat, hogy csökkentsd az időtúllépések esélyét.
Egy tooling-futtatás legfeljebb egy megabájtnyi stdoutot és stderr-t állíthat elő. Ha ennél többet állít elő, a folyamat a 413-as hibakóddal leáll.
Minden futtatás stdout és stderr tartalmát fájlokban tároljuk.
Írhatsz egy results.out fájlt a kimeneti könyvtárba, amely hibakeresési információkat tartalmaz.
Jelenleg a karbantartók nem tudják megtekinteni ezeknek a fájloknak a tartalmát.
Az eredményfájl nem lehet nagyobb 500 kilobájtnál (a stack trace-eket stb. is beleértve). Ha a fájl ennél nagyobb, a tooling-futtatást a 460-as hibakóddal leállítjuk.
Minden megoldás 100%-os gépi erőforrásokat kap egy húsz másodperces időablakra. 20 másodperc után a folyamat leáll, és időtúllépésként jelentkezik.
Egyes eszközök (kis) eltéréseket igényelnek az alapértelmezett konfigurációtól.
Ilyen esetben ezeket a Tooling Invoker repositoryban található tools.json fájlban konfiguráljuk.
Az eszközök internet-hozzáférés nélkül futnak. Két különböző konfigurációt használhatsz:
none. Ez letiltja a konténeren belüli hálózati eszközt.internal. Ez hozzáad egy hálózati eszközt a konténeren belül, de a hálózatnak nincs hozzáférése semmi külsőhöz.A különböző nyelvek eltérő konfigurációkkal teljesítenek jobban vagy rosszabbul (pl. a Ruby 2x gyorsabb none esetén. Az Elixir 12x gyorsabb internal esetén.
Helyben kísérletezhetsz a --network kapcsolóval, amikor a dockert futtatod. A --network none alapértelmezés szerint támogatott.
A belső hálózat használatához először futtasd a docker network create --internal internal parancsot a hálózat létrehozásához, majd a konténer futtatásakor használd a --network internal kapcsolót.
A nyelvek beállíthatják a feladataik futtatásához szükséges maximális memóriát. Ha ezt a lehető legalacsonyabbra állítjuk, több feladatot tudunk gyorsabban párhuzamosan futtatni. Azt is jelenti, hogy akik visszaélésszerűen próbálják használni a memóriát, nem járhatnak sikerrel. A különböző nyelvek nagyon eltérő maximális memóriahasználatot igényelnek. Érdemes és nagyra értékeljük, ha benchmarkolod egy docker run végrehajtását, hogy megállapítsd, mennyi memóriát használ maximálisan.
A memóriát meg kell adni egy számmal, amelynek utótagja b, k, m vagy g, jelezve a bájtot, kilobájtot, megabájtot vagy gigabájtot.
A fenti beállításokat ezzel a paranccsal tesztelheted:
docker container run -v /path/to/job:/mnt/exercism-iteration --network none -m 1GB exercism/ruby-test-runner lasagna /mnt/exercism-iteration/ /mnt/exercism-iteration/
A Dockerfile-ok minden módosításához a @exercism/maintainers-admin csapat PR-jóváhagyása szükséges, hogy elkerüljük biztonsági sebezhetőségek bevezetését.