Hosting runnerów CI
Odpowiedź
Własne runner'y CI wykonują Twoje pipeline'y na serwerach, które kontrolujesz, zamiast na współdzielonej puli dostawcy. Plan VECTOR w Incognito VPS za 14 USD miesięcznie zwykle radzi sobie lepiej niż runner hosted, jednocześnie eliminując rozliczenia za minuty i kolejki.
| Scenariusz | Minimum |
|---|---|
| Small project | 2 vCPU, 4 GB RAM |
| Typical monorepo | 6 vCPU, 16 GB RAM |
| Heavy compile (Rust, C++) | 16 vCPU, 64 GB RAM |
| Docker layer cache | 140 GB+ NVMe |
Arytmetyka jest zwykle rozstrzygająca
Minuty CI w chmurze wydają się tanie, dopóki ich nie policzysz. Zespół uruchamiający kilkaset buildów miesięcznie na 2-rdzeniowych runnerach hosted wydaje zwykle więcej niż kosztuje dedykowany VPS z 6 rdzeniami, a do tego otrzymuje wolniejsze buildy, bo runner'y hosted to skromne maszyny pod obciążeniem.
Drugą oszczędnością jest czas, a nie pieniądze. Własny runner nie ma kolejki — zadanie startuje, gdy pushujesz. Na ruchliwej puli hosted oczekiwanie na runner przez kilka minut jest normalne, a to opóźnienie dotyka każdego programisty i każdego pusha.
Cache to miejsce, gdzie naprawdę zyskujesz na szybkości
Trwały lokalny NVMe zmienia ekonomikę CI bardziej niż surowa liczba rdzeni. Warstwy Dockera, rejestry Cargo, node_modules, cache Gradle'a i ccache przetrwają między uruchomieniami na własnym runnerze, podczas gdy runner hosted startuje od zera i pobiera wszystko ponownie.
W przypadku dużych projektów w Rust lub C++ często oznacza to pięcio- do dziesięciokrotną redukcję czasu budowy, i to całkowicie za darmo.
Izolacja, bo runner'y wykonują dowolny kod
Własny runner wykonuje to, co jest w pipeline, co w przypadku publicznego repozytorium oznacza to, co w pull requeście umieści współpracownik. Nigdy nie podłączaj własnego runnera do publicznego repozytorium bez efemerycznej, izolowanej egzekucji.
Używaj efemerycznych runnerów w kontenerach lub krótkotrwałych maszynach wirtualnych, nie dawaj runnerowi żadnych poświadczeń, których nie potrzebuje, i umieść go na serwerze, na którym nic innego nie działa. Maszyna za 14 USD na projekt to tanie ubezpieczenie przed tym, że skompromitowany pipeline nie dotrze do reszty infrastruktury.
Często zadawane pytania
01 Jaki plan na runner CI?
VECTOR (4 vCPU, 8 GB) na typowy projekt; BASTION (6 vCPU, 16 GB) na monorepo lub intensywne kompilacje. Trwały cache NVMe jest ważniejszy niż liczba rdzeni dla większości pipeline'ów.
02 Czy działa z GitHub Actions?
Tak. Zarejestruj maszynę jako własny runner i kieruj na nią zadania przez runs-on. GitLab, Forgejo, Woodpecker i Drone działają w ten sam sposób.
03 Czy własny runner jest bezpieczny dla publicznych repozytoriów?
Nie bez efemerycznej izolacji. Pull request może wykonać dowolny kod na runnerze. Używaj efemerycznych kontenerów lub jednorazowych maszyn wirtualnych i nie nadawaj poświadczeń, których pipeline nie potrzebuje.
04 How much faster is it?
Zwykle od dwóch do czterech razy na surowej mocy obliczeniowej i od pięciu do dziesięciu razy w pipeline'ach wykorzystujących cache, ponieważ warstwy Dockera i cache zależności pozostają między uruchomieniami zamiast być pobierane ponownie.
Powiązane