feat: add Timeweb Cloud provider for Woodpecker CI autoscaler

- Implement timewebcloud provider with DeployAgent, RemoveAgent, ListDeployedAgentNames
- Add minimal HTTP API client for Timeweb Cloud (create/list/delete servers)
- Register provider in main.go with CLI flags
- Add timeweb-list and timeweb-tester utilities
- Include Dockerfile and docker-compose.yml for deployment
- Update DEPLOY.md with verified OS/preset IDs
This commit is contained in:
2026-05-16 13:09:07 +03:00
commit 191cdd108f
34 changed files with 8651 additions and 0 deletions

92
docs/DEPLOY.md Normal file
View File

@@ -0,0 +1,92 @@
# Инструкция по развертыванию
## 1. Получение API-токена Timeweb Cloud
1. Войдите в панель управления Timeweb Cloud: https://timeweb.cloud
2. Перейдите в раздел **"API и Terraform"**.
3. Создайте новый токен:
- Задайте имя (например, `woodpecker-autoscaler`).
- Выберите права: управление серверами (Servers).
- Можно отключить подтверждение через Telegram для автоматизации.
- Сохраните токен — он отображается только один раз.
## 2. Определение параметров сервера
Проверенные параметры для CI-агента:
| Параметр | Значение | Описание |
|----------|----------|----------|
| OS ID | `79` | Ubuntu 22.04 LTS |
| Preset ID | `2451` | Cloud-40 (2 CPU, 2GB RAM, 40GB NVMe, 800 руб/мес) |
| Availability Zone | `spb-1` | Санкт-Петербург (ru-1) |
Другие варианты:
- Ubuntu 24.04: `os_id=99`
- Debian 12: `os_id=95`
- Москва: `zone=msk-1`, `preset_id=4799` (Cloud MSK 40)
- Новосибирск: `zone=nsk-1`, `preset_id=4241` (Cloud NSK 40)
Для получения полного списка:
```bash
./timeweb-list
```
## 3. Настройка Woodpecker Autoscaler
Создайте `.env` файл:
```bash
# Woodpecker Server
WOODPECKER_SERVER=http://woodpecker-server:8000
WOODPECKER_TOKEN=your-woodpecker-admin-token
WOODPECKER_GRPC_ADDR=woodpecker-server:9000
WOODPECKER_GRPC_SECURE=false
# Autoscaler
WOODPECKER_POOL_ID=twcloud
WOODPECKER_MIN_AGENTS=0
WOODPECKER_MAX_AGENTS=5
WOODPECKER_WORKFLOWS_PER_AGENT=2
WOODPECKER_AGENT_IDLE_TIMEOUT=10m
WOODPECKER_RECONCILIATION_INTERVAL=1m
WOODPECKER_PROVIDER=timewebcloud
# Timeweb Cloud
WOODPECKER_TIMEWEBCLOUD_API_TOKEN=your-jwt-token
WOODPECKER_TIMEWEBCLOUD_OS_ID=79
WOODPECKER_TIMEWEBCLOUD_PRESET_ID=2451
WOODPECKER_TIMEWEBCLOUD_AVAILABILITY_ZONE=spb-1
# Опционально: SSH-ключи для доступа к агентам
# WOODPECKER_TIMEWEBCLOUD_SSH_KEY_IDS=1234
```
## 4. Запуск через Docker Compose
```bash
docker-compose up -d
```
Просмотр логов:
```bash
docker-compose logs -f woodpecker-autoscaler
```
## 5. Проверка
1. Запушьте коммит в репозиторий, подключенный к Woodpecker.
2. В логах autoscaler должно появиться `create agent` и `create server`.
3. В панели Timeweb Cloud должен создаться новый сервер с именем `pool-twcloud-agent-<random>`.
4. Через 2-3 минуты агент подключится к серверу и заберет задачу.
5. После завершения задачи и истечения `AGENT_IDLE_TIMEOUT` сервер будет удален.
## 6. Тестирование API (опционально)
Для проверки корректности API-клиента:
```bash
# Список ОС и тарифов
./timeweb-list
# Тест создания/удаления сервера
TIMEWEB_API_TOKEN=your-token ./timeweb-tester
```