Хостинг CI-ранерів
Відповідь
Саморозміщені CI-раннери виконують ваші пайплайни збірки на серверах, якими ви керуєте, а не в спільному пулі провайдера. Тариф VECTOR Incognito VPS за $14 на місяць зазвичай перевершує хостинговий раннер, повністю усуваючи погодинну оплату та черги очікування.
| Сценарій | Мінімум |
|---|---|
| Невеликий проєкт | 2 vCPU, 4 ГБ RAM |
| Типовий монорепозиторій | 6 vCPU, 16 ГБ RAM |
| Важка компіляція (Rust, C++) | 16 vCPU, 64 ГБ RAM |
| Кеш Docker-шарів | 140+ ГБ NVMe |
Арифметика зазвичай вирішує все
Хостингові CI-хвилини здаються дешевими, поки не почнеш їх рахувати. Команда, яка виконує кілька сотень збірок на місяць на 2-ядерних хостингових раннерах, зазвичай витрачає більше, ніж коштує виділений VPS з 6 ядрами, і отримує повільніші збірки, бо хостингові раннери — це скромні машини під навантаженням.
Інша економія — це час, а не гроші. Саморозміщений раннер не має черги — ваше завдання починається, коли ви пушите. У завантаженому хостинговому пулі чекати на раннер кілька хвилин — норма, і ця затримка лягає на кожного розробника, на кожен пуш.
Кешування — ось де справжнє прискорення
Постійний локальний NVMe змінює економіку CI більше, ніж сира кількість ядер. Docker-шари, реєстри Cargo, node_modules, кеші Gradle та ccache зберігаються між запусками на саморозміщеному раннері, тоді як хостинговий раннер стартує з чистого аркуша і завантажує все заново.
Для великого проєкту на Rust або C++ це часто означає скорочення часу збірки вп'ятеро-вдесятеро, і це абсолютно безкоштовно.
Ізоляція, бо раннери виконують довільний код
Саморозміщений раннер виконує все, що є в пайплайні, а для публічного репозиторію це означає все, що контриб'ютор додав у pull request. Ніколи не підключайте саморозміщений раннер до публічного репозиторію без ефемерної ізольованої виконч.
Використовуйте ефемерні раннери в контейнерах або недовговічних віртуальних машинах, не давайте раннеру облікових даних, які йому не потрібні, і розміщуйте його на сервері, де немає нічого іншого. Машина за $14 на проєкт — дешева страховка від того, що скомпрометований пайплайн дістанеться до решти вашої інфраструктури.
Поширені запитання
01 Який тариф обрати для CI-раннера?
VECTOR (4 vCPU, 8 ГБ) для типового проєкту; BASTION (6 vCPU, 16 ГБ) для монорепозиторію або важкої компіляції. Постійний NVMe-кеш для більшості пайплайнів важливіший за кількість ядер.
02 Чи працює це з GitHub Actions?
Так. Зареєструйте машину як саморозміщений раннер і вкажіть її в runs-on. GitLab, Forgejo, Woodpecker і Drone працюють так само.
03 Чи безпечний саморозміщений раннер для публічних репозиторіїв?
Ні, без ефемерної ізоляції. Pull request може виконати довільний код на раннері. Використовуйте ефемерні контейнери або одноразові віртуальні машини і ніколи не надавайте облікових даних, яких не потребує пайплайн.
04 Наскільки це швидше?
Зазвичай у два-чотири рази на сирих обчисленнях і в п'ять-десять разів на пайплайнах із кешуванням, бо Docker-шари та кеші залежностей зберігаються між запусками, а не завантажуються заново.
Пов'язане