A modern szoftverfejlesztés egyik alappillére a folyamatos integráció és folyamatos szállítás (CI/CD – Continuous Integration/Continuous Delivery). Ennek köszönhetően a fejlesztők gyorsabban, megbízhatóbban és hatékonyabban juttathatják el kódjukat a felhasználókhoz. A GitHub Actions az egyik legnépszerűbb eszköz, amely lehetővé teszi a fejlesztők számára, hogy automatizálják szoftverfejlesztési munkafolyamataikat közvetlenül a GitHub-repositoryjukból. Alapértelmezés szerint a GitHub a saját, felhőalapú futtatóin (GitHub-hosted runners) biztosítja ezt a szolgáltatást, de mi van akkor, ha egyedi igényeink vannak, amelyek túllépnek a felhőalapú megoldások korlátain?
Ilyen esetekben lép színre a saját szerveren futó GitHub Actions futtató (self-hosted runners). Ez a megoldás maximális kontrollt és rugalmasságot biztosít, lehetővé téve, hogy a munkafolyamatainkat saját hardverünkön, saját környezetünkben, és a saját hálózati infrastruktúránk részeként futtassuk. Merüljünk el részletesebben abban, hogy mikor érdemes ezt a lehetőséget választani, hogyan kell beállítani, és milyen előnyökkel, illetve kihívásokkal jár!
Mikor válasszuk a saját szerveren futó futtatót? Előnyök és használati esetek
A GitHub Actions self-hosted runners megoldása nem mindenki számára ideális, de bizonyos forgatókönyvekben vitathatatlan előnyökkel jár. Nézzük meg, melyek ezek a helyzetek:
1. Hozzáférés privát hálózati erőforrásokhoz
Ha a CI/CD munkafolyamataink során olyan belső adatbázisokhoz, API-khoz, vagy más vállalati rendszerekhez kell hozzáférnünk, amelyek egy privát hálózaton belül, tűzfal mögött találhatók, a saját szerveren futó futtató az egyetlen járható út. A GitHub által biztosított futtatók nyilvános IP-címmel rendelkeznek, és nem férnek hozzá közvetlenül az Ön privát hálózatához, hacsak nem konfigurál komplex VPN-kapcsolatokat.
2. Specifikus hardveres igények
Vannak olyan projektek, amelyek speciális hardveres környezetet igényelnek. Gondoljunk csak a gépi tanulási modellek képzésére, amelyekhez GPU-gyorsításra van szükség, vagy mobilalkalmazások fejlesztésére, amelyek adott operációs rendszer (pl. macOS) és hardver (pl. Apple Silicon) kombinációját igénylik. Előfordulhat, hogy ARM alapú architektúrára vagy rendkívül nagy memóriára van szükségünk a fordításhoz vagy teszteléshez. A saját szerveres futtatóval Ön dönti el, milyen hardveren futnak a feladatai.
3. Költségoptimalizálás hosszú futásidejű vagy nagy volumenű projektek esetén
Bár a GitHub ingyenes perceket biztosít a felhőalapú futtatóihoz, a nagyobb, hosszabb futásidejű projektek, vagy a nagyon gyakori buildelések esetén a költségek gyorsan emelkedhetnek. A saját szerveres futtatók használatával, különösen, ha már rendelkezik kihasználatlan szerverkapacitással, jelentős költségeket takaríthat meg hosszú távon. Egy saját szerver kezdeti beruházása magasabb lehet, de az üzemeltetési költségek fixebbek és kiszámíthatóbbak, különösen, ha a futtatók kihasználtsága magas.
4. Egyedi szoftveres környezetek és előre telepített függőségek
Bizonyos munkafolyamatokhoz speciális szoftverekre, egyedi verziójú eszközökre vagy bonyolult függőségi láncokra lehet szükség. A GitHub-hosted futtatók előre telepített szoftverek széles skáláját kínálják, de nem minden lehetséges kombinációt. A saját futtatóval Ön teljesen testreszabhatja a környezetet, előre telepítheti az összes szükséges szoftvert, csökkentve ezzel a buildidőt, mivel nem kell minden alkalommal letölteni és telepíteni mindent.
5. Biztonsági és megfelelőségi követelmények
Néhány iparágban vagy szabályozási környezetben rendkívül szigorúak az adatlokalizációra, adatvédelemre és biztonságra vonatkozó előírások. A saját szerveren futó futtatók lehetővé teszik, hogy a CI/CD folyamatok teljes egészében az Ön ellenőrzése alatt álló infrastruktúrán fussanak, ami megkönnyíti a megfelelőségi auditokat és a biztonsági szabályok betartását.
6. Hosszabb futásidő korlátok elkerülése
A GitHub-hosted futtatók általában egy 6 órás időkorlátot alkalmaznak a munkafolyamatokra. Ha a buildelési, tesztelési vagy telepítési folyamatai ennél tovább tartanak, a saját futtatók biztosítják a szükséges időt anélkül, hogy aggódnia kellene a leállás miatt.
A saját szerveren futó futtatók árnyoldalai: Mire figyeljünk?
Bár a self-hosted runners számos előnnyel jár, fontos tudatosítani a hátrányokat és a velük járó felelősséget is:
1. Karbantartás és üzemeltetés
A legnagyobb különbség a GitHub-hosted futtatókhoz képest, hogy a karbantartás teljes felelőssége Önt terheli. Ez magában foglalja az operációs rendszer (OS) frissítéseit, a szoftverfüggőségek kezelését, a biztonsági javítások telepítését, valamint a hardver felügyeletét. Egy elhanyagolt futtató sebezhetővé válhat, vagy elavult függőségek miatt hibákat okozhat a buildelésekben.
2. Skálázhatóság
A GitHub-hosted futtatók automatikusan skálázódnak a terheléshez. Saját futtatók esetén a skálázhatóság biztosítása az Ön feladata. Manuálisan adhat hozzá új futtatókat, vagy automatizálhatja a folyamatot szkriptekkel, felhőszolgáltatásokkal (pl. autoscaling groupok), vagy Kubernetes alapú megoldásokkal, ami komplexitást ad a rendszerhez.
3. Biztonság
Mivel a futtatók az Ön infrastruktúráján futnak, Ön felelős a biztonságukért. Egy rosszul konfigurált futtató potenciális belépési pont lehet a hálózatába. Fontos odafigyelni a minimális jogosultság elvére, a hálózati szegmentációra és a rendszeres auditálásra.
4. Kezdeti beruházás és üzemeltetési költségek
Bár hosszú távon költséghatékony lehet, a kezdeti beruházás (hardver, szoftverlicencek) magasabb lehet. Emellett figyelembe kell venni az áramfogyasztást, a hálózati költségeket és az üzemeltetői személyzet idejét is.
5. Futtató életciklus kezelése
A futtatók regisztrálása, elindítása, leállítása és törlése mind az Ön felelőssége. Ez különösen igaz az efemer (rövid életű) futtatókra, amelyek egy feladat elvégzése után automatikusan megsemmisülnek, és újra kell őket konfigurálni egy új feladathoz.
Hogyan állítsuk be? Lépésről lépésre útmutató
A GitHub Actions self-hosted runner beállítása viszonylag egyszerű folyamat, de némi technikai ismeretet igényel. Lássuk a lépéseket!
1. Előfeltételek
- Operációs rendszer: Linux, Windows, vagy macOS. Győződjön meg róla, hogy a futtató szoftver által támogatott verziót használja.
- Hardver: Elegendő CPU, memória és tárhely a munkafolyamatok futtatásához.
- Hálózati hozzáférés: A futtató gépnek képesnek kell lennie kommunikálni a GitHub szervereivel az interneten keresztül (általában HTTPS/443 porton).
- Függőségek: A futtató szoftverhez .NET Core SDK szükséges, valamint Git kliens a repository klónozásához.
2. Futtató hozzáadása a GitHubon
Be kell jelentenie a GitHubnak, hogy hozzá szeretne adni egy saját futtatót. Ez történhet egy adott repository vagy egy egész szervezet szintjén:
- Repository szinten: Lépjen a repository beállításaihoz (`Settings` > `Actions` > `Runners`).
- Szervezet szinten: Lépjen a szervezet beállításaihoz (`Organization settings` > `Actions` > `Runners`).
Kattintson az `New self-hosted runner` gombra. Itt kiválaszthatja az operációs rendszert és az architektúrát, majd a GitHub megadja a futtató szoftver letöltéséhez és konfigurálásához szükséges parancsokat.
Itt van lehetőség runner groupok létrehozására is. Ezek segítségével csoportosíthatja a futtatóit, és szabályozhatja, hogy mely repositoryk vagy szervezeti tagok használhatják az adott futtatókat. Ez segít a jogosultságok kezelésében és a futtatók izolációjában.
3. A futtató szoftver letöltése és konfigurálása
A futtató gépén kövesse a GitHub által megadott utasításokat:
- Hozzon létre egy könyvtárat a futtató számára, például:
mkdir actions-runner && cd actions-runner
- Töltse le a futtató szoftvert a GitHub által megadott URL-ről (pl.
curl -o actions-runner-linux-x64-2.308.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.308.0/actions-runner-linux-x64-2.308.0.tar.gz
) és bontsa ki:tar xzf ./actions-runner-linux-x64-2.308.0.tar.gz
- Futtassa a konfigurációs szkriptet:
./config.sh --url https://github.com/OWNER/REPOSITORY --token YOUR_TOKEN
- Az
--url
paraméter a repository vagy szervezet URL-jét adja meg. - A
--token
paraméter a GitHub által generált egyszer használatos regisztrációs tokent tartalmazza. - A konfiguráció során megadhatja a futtató nevét, és hozzárendelhet runner label-eket. A címkék segítenek a munkafolyamatoknak kiválasztani a megfelelő futtatót (pl.
ubuntu-latest
,gpu-enabled
,mac-arm64
).
- Az
- Indítsa el a futtatót:
./run.sh
vagy./run.cmd
Alapértelmezés szerint a futtató egy konzolablakban fut. Éles környezetben szolgáltatásként érdemes futtatni (pl. systemd Linuxon, NSSM Windows-on), hogy a háttérben fusson és automatikusan elinduljon a gép újraindulásakor.
A futtató indításakor választhatja az „efemer” módot (
--ephemeral
flag aconfig.sh
parancsnál), ami azt jelenti, hogy a futtató egyetlen feladat elvégzése után automatikusan leáll és törli magát a GitHubról. Ez növeli a biztonságot és a tisztaságot, de megköveteli a futtató automatikus újraindítását minden feladat előtt.
4. Tesztelés
Hozzon létre egy egyszerű GitHub Actions workflow-t a repositoryjában (pl. .github/workflows/test.yml
), amely expliciten hivatkozik az Ön futtatójára a megadott címkékkel (pl. runs-on: self-hosted
vagy runs-on: [self-hosted, linux, my-custom-label]
). Ellenőrizze, hogy a futtató felismeri és végrehajtja a feladatot.
Biztonsági megfontolások és legjobb gyakorlatok
A biztonság kiemelten fontos, ha saját szerveren futtatja a GitHub Actions futtatóit. Íme néhány legjobb gyakorlat:
- Izoláció: A futtatókat dedikált gépeken, virtuális gépeken (VM) vagy Docker konténerekben futtassa. Ez megakadályozza, hogy egy rosszindulatú workflow hozzáférjen más rendszerekhez vagy adatokhoz. Az efemer futtatók használata ebben sokat segít, mivel minden feladat friss, tiszta környezetben fut.
- Minimális jogosultság elve: A futtató folyamatokat a lehető legkevesebb jogosultsággal futtassa. Ne futtassa rootként vagy adminisztrátorként, hacsak nem feltétlenül szükséges. Hozzon létre egy dedikált felhasználói fiókot a futtatónak.
- Titkos adatok kezelése: Soha ne tároljon érzékeny adatokat (API kulcsok, jelszavak) közvetlenül a futtatón. Használja a GitHub Secrets funkcióját, amely titkosított formában továbbítja az adatokat a futtatónak.
- Hálózati szegmentáció: Helyezze a futtatókat egy elszigetelt hálózati szegmensbe (pl. VPC, dedikált VLAN), és korlátozza a kimenő és bejövő forgalmat tűzfal szabályokkal. Csak a szükséges portokon és címekre engedélyezze a kommunikációt.
- Rendszeres frissítések: Rendszeresen frissítse az operációs rendszert, a futtató szoftvert és az összes telepített függőséget a legújabb biztonsági javításokkal.
- Auditálás és naplózás: Győződjön meg róla, hogy a futtató tevékenységeit naplózza, és ezeket a naplókat rendszeresen ellenőrizze rendellenességek vagy biztonsági incidensek szempontjából.
Haladó tippek és trükkök
Ha már kényelmesen bánik az alapokkal, érdemes megfontolni néhány haladó technikát a self-hosted runners hatékonyabb kihasználásához:
1. Skálázás automatizálása
A manuális skálázás fárasztó és hibalehetőségeket rejt. Automatizálja a futtatók létrehozását és megsemmisítését a terhelés alapján. Ehhez használhat:
- Cloud-szolgáltatók autoscaling csoportjait: AWS EC2 Auto Scaling, Azure Virtual Machine Scale Sets, Google Compute Engine Managed Instance Groups. Ezek képesek automatikusan elindítani vagy leállítani VM-eket a forgalom függvényében.
- Kubernetes alapú megoldásokat: Az
actions-runner-controller
egy népszerű Kubernetes operátor, amely lehetővé teszi a GitHub Actions futtatók dinamikus skálázását Kubernetes klasztereken. - Infrastruktúra mint kód (IaC) eszközöket: Terraform vagy Ansible segítségével automatizálhatja a futtatók telepítését és konfigurálását.
2. Futtató címkék (labels) használata
Ahogy már említettük, a runner label-ek kulcsfontosságúak a munkafolyamatok irányításában. Határozzon meg egyértelmű és specifikus címkéket a futtatóihoz (pl. production-deploy
, dotnet-core-3.1
, large-memory
), és használja ezeket a runs-on:
kulcsszóval a workflow fájljaiban.
3. Dockerizált futtatók
Ahelyett, hogy közvetlenül az operációs rendszeren telepítené a futtató szoftvert és az összes függőséget, futtathatja a futtatót egy Docker konténerben. Ez tovább növeli az izolációt, és könnyebbé teszi az előre konfigurált, stabil környezetek létrehozását. A Docker Compose vagy Kubernetes segítségével egyszerűen menedzselheti ezeket a konténereket.
4. Környezet előkészítése és cache-elés
Az előre telepített szoftverek és a cache-elés jelentősen csökkenthetik a buildelési időt. Használjon Actions cache-t a gyakran letöltött függőségek (pl. npm packages, Maven dependencies) gyorsítótárazására. A futtatók „melegen” tartása, vagyis az előre telepített függőségekkel és előmelegített cache-sel rendelkező futtatók rendelkezésre állása gyorsabb végrehajtást eredményez.
Összefoglalás és jövőbeli kilátások
A GitHub Actions self-hosted runners rendkívül erőteljes eszközök a CI/CD automatizálás területén. Bár extra felelősséggel és karbantartási terhekkel járnak, az általuk kínált kontroll, rugalmasság és testreszabhatóság felbecsülhetetlen értékű lehet specifikus projektek és vállalati környezetek számára.
Ha a projektje privát hálózati hozzáférést, speciális hardvert, egyedi szoftveres környezetet igényel, vagy hosszú távon szeretné optimalizálni a költségeket, akkor a saját szerveren futó futtatók jelentik a legjobb választást. Fontos azonban alaposan mérlegelni a biztonsági és karbantartási szempontokat, és lehetőség szerint automatizálni a skálázást és a futtatók életciklus-kezelését.
A modern DevOps kultúra részeként a saját szerveres futtatók lehetővé teszik a szervezetek számára, hogy a lehető leginkább személyre szabott és hatékony munkafolyamatokat építsenek ki, maximalizálva ezzel a fejlesztési sebességet és a szoftverminőséget.
Leave a Reply