Одноразовые CI-раннеры и staging-серверы с почасовой оплатой
Разворачивайте сборочный раннер или staging-сервер на каждый pull request прямо из пайплайна, используйте и удаляйте. Почасовая оплата с предоплаченного крипто-баланса, REST API и CLI.
Коротко
CI-машина, которая всю ночь ждёт коммитов, это сервер, за который вы платите и которым не пользуетесь. Если сервер создаётся и удаляется вызовом API и оплачивается по часам, пайплайн может поднять раннер, когда есть работа, и убрать его после неё, а pull request получить собственный staging-сервер на время, пока он открыт.
В Neckrez есть всё нужное: REST API с отзываемыми ключами, клиент командной строки, массовый деплой, cloud-init при создании и почасовая оплата с предоплаченного баланса, платить можно криптой без проверки личности. Готовой интеграции с CI у нас нет. Вы вызываете API или CLI из своего пайплайна, а эта страница о том, как делать это разумно.
Жизнь раннера
- Создание. Пайплайн разворачивает сервер и передаёт ему cloud-init-файл, который ставит раннер и регистрирует его. Лучше всего подходят раннеры, которые берут одну задачу и затем снимаются с регистрации (так умеют GitHub Actions, GitLab CI и Drone).
- Работа. Задача выполняется на чистой машине, поэтому от прошлой сборки ничего не остаётся.
- Удаление. Последний шаг удаляет сервер, и списания сразу прекращаются.
# in the pipeline: create a runner, run the job on it, always delete it
neckrez deploy "ci-$RUN_ID" --plan photon --location AMS --cloud-init runner-init.yml --wait --json > server.json
# ... the job runs on that machine ...
neckrez rm "ci-$RUN_ID" --yes # put this in a step that runs even when the job fails
Создание занимает около минуты, и задача ждёт это время. Если ожидание важно, держите несколько раннеров прогретыми, а остальные поднимайте по требованию. Полный список эндпоинтов — в документации API и в /llms.txt.
Сколько на самом деле стоит час
Оплата идёт целыми часами. Первый час списывается при создании сервера, и сервер, удалённый через десять минут, всё равно стоит этот час. Поэтому экономия получается не на сборке длиной в секунды, а на том, что вы не платите за остальные двадцать часов суток.
- Складывайте задачи на один раннер. Пусть раннер возьмёт несколько задач в пределах своего часа, а потом удаляется, вместо отдельного сервера на каждую задачу.
- Подбирайте размер. Самый маленький тариф стоит около полутора центов в час. Четырёхъядерный тоже дешевле десяти центов. Актуальные цены смотрите в таблице ниже.
- Масштабирование в ноль на ночь. Если очередь пуста, ничего не работает и ничего не списывается.
Staging-сервер на каждый pull request
Один недорогой сервер на pull request даёт ревью понятнее, чем скриншоты: создайте его при открытии PR, запустите docker compose up и сквозные тесты, отправьте адрес превью, удалите при слиянии или закрытии. Приложение Docker в один клик избавляет от самостоятельной установки Docker. У сервера свой выделенный IPv4, так что адрес превью — это обычный IP с портом, если вы не подключите свой DNS.
Защита для пайплайна, который тратит деньги
- Лимит — это баланс. Без средств развернуть нельзя, а счёта в конце месяца нет. Лимит действует на аккаунт, поэтому заведите CI отдельный аккаунт с небольшим балансом.
- Один ключ на пайплайн, при желании со сроком действия. Утёкший ключ отзывается одним действием.
- Всегда убирайте за собой. Удаление должно стоять в шаге, который выполняется даже при падении задачи, а ещё нужна задача-уборщик: она показывает серверы через
neckrez ls --jsonи удаляет все с вашим префиксом старше нескольких часов. - Помните про лимит запросов. API допускает 60 запросов в минуту на ключ. Опрашивайте примерно раз в 5 секунд, а не в плотном цикле.
- Пустой баланс даёт о себе знать. Сервер, который баланс уже не покрывает, архивируется: делается снимок диска, сервер удаляется, снимок хранится 7 дней.
Когда лучше постоянный парк
Короткие одноразовые раннеры подходят для всплесковой работы. Для ровных тяжёлых сборок, где важна стабильность времени (быстро в понедельник, медленно в пятницу), сервер Dedicated CPU резервирует ядра за вами. Долгоживущий раннер может быть и обычным сервером, который работает постоянно, как в VPS для ботов. Bare metal для этого не годится: он устанавливается 10–30 минут.
Как начать
- 1. Зарегистрируйтесь по email, пополните баланс криптой (минимум $15) и создайте API-ключ.
- 2. Один раз создайте и удалите сервер вручную через CLI, чтобы увидеть время и стоимость.
- 3. Напишите cloud-init, который ставит и регистрирует ваш раннер.
- 4. Подключите это в пайплайн с шагом удаления, который выполняется всегда, и задачей-уборщиком.
FAQ
Можно ли использовать GitHub Actions, GitLab CI или Drone? На сервере Neckrez может работать любой CI, раннер которого умеет сам регистрироваться при загрузке машины. Готовой интеграции с CI у нас нет: шаги создания и удаления вы пишете через API или CLI.
Как идёт оплата? По часам с предоплаченного баланса. Первый час списывается при создании, а сервер, удалённый раньше, всё равно стоит этот час. Актуальные цены — в таблице на этой странице.
Как быстро раннер готов? VPS обычно поднимается примерно за минуту. К этому добавьте время, которое cloud-init тратит на установку раннера.
Можно ли сохранить подготовленный диск между запусками? Можно сделать снимок сервера и восстановить его как новый, у которого будет новый IP. Снимки хранятся 7 дней. Хранить готовый образ дольше — на вашей стороне.
Есть ли лимит на число серверов, которые создаёт пайплайн? Лимита на аккаунт по умолчанию нет. Один массовый запрос создаёт до 10 серверов, а API допускает 60 запросов в минуту на ключ. Реально расходы ограничивает баланс.
Что если задача упала, а сервер остался? Он продолжает списываться, пока не будет удалён. Ставьте удаление в шаг, который выполняется всегда, и добавьте задачу-уборщика для забытых. Те же меры описаны на странице серверы для AI-агентов.
Можно ли платить без карты и без проверки личности? Да. Вы регистрируетесь по email и платите Bitcoin, USDT, ETH или любой из 300+ монет. Пополнения окончательны, см. политику возвратов и биллинга.