- 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
4.9 KiB
4.9 KiB
Timeweb Cloud Autoscaler Provider for Woodpecker CI
Динамический autoscaler для Woodpecker CI с поддержкой хостера Timeweb Cloud.
Архитектура
┌──────────────────────┐
│ Woodpecker Server │◄──── постоянно запущен на VDS
│ (gRPC + Web UI) │
└──────────┬───────────┘
│
▼ gRPC
┌──────────────────────┐
│ Woodpecker Agent │◄──── постоянно запущен на VDS (можно оставить 1 статический)
│ (Docker Compose) │
└──────────────────────┘
┌──────────────────────────────────────────┐
│ Woodpecker Autoscaler │◄──── постоянно запущен
│ (форк woodpecker-ci/autoscaler + │
│ провайдер timewebcloud) │
└──────────┬───────────────────────────────┘
│
▼ HTTP / JWT
┌──────────────────────────────────────────┐
│ Timeweb Cloud API │
│ api.timeweb.cloud │
│ - CreateServer │
│ - DeleteServer │
│ - ListServers │
└──────────────────────────────────────────┘
Flow:
1. Появляется задача в очереди Woodpecker
2. Autoscaler создает новый VDS через Timeweb API
3. VDS загружается, cloud-init устанавливает Docker и запускает Agent
4. Agent подключается к Server по gRPC и забирает задачу
5. По завершении задачи и истечении idle-timeout, autoscaler удаляет VDS
Сборка
Требования: Go 1.23+
go build -o woodpecker-autoscaler ./cmd/woodpecker-autoscaler
При сборке на машине с ограниченной памятью используйте:
GOMAXPROCS=1 go build -p 1 -o woodpecker-autoscaler ./cmd/woodpecker-autoscaler
Запуск
export WOODPECKER_SERVER=https://your-woodpecker-server
export WOODPECKER_TOKEN=your-token
export WOODPECKER_PROVIDER=timewebcloud
export WOODPECKER_TIMEWEBCLOUD_API_TOKEN=your-jwt-token
export WOODPECKER_TIMEWEBCLOUD_OS_ID=123
export WOODPECKER_TIMEWEBCLOUD_PRESET_ID=456
export WOODPECKER_TIMEWEBCLOUD_AVAILABILITY_ZONE=msk-1
./woodpecker-autoscaler
Структура проекта
twcloud-scaler/
├── agents.md # Контекст для AI-агентов
├── README.md # Этот файл
├── go.mod # Модуль Go
├── woodpecker-autoscaler # Собранный бинарник
├── cmd/
│ └── woodpecker-autoscaler/
│ ├── main.go # Точка входа
│ └── flags.go # Глобальные CLI-флаги
├── providers/
│ └── timewebcloud/
│ ├── provider.go # Реализация Provider interface
│ ├── flags.go # CLI-флаги провайдера
│ └── api/
│ └── client.go # Минимальный HTTP-клиент для Timeweb API
├── engine/ # Ядро autoscaler (из upstream)
├── config/ # Конфигурация (из upstream)
├── server/ # Woodpecker API client (из upstream)
└── utils/ # Утилиты (из upstream)
Что реализовано
- Провайдер
timewebcloudдля Woodpecker Autoscaler - Создание VDS (
DeployAgent) с cloud-init - Удаление VDS (
RemoveAgent) по имени агента - Список развернутых агентов (
ListDeployedAgentNames) с фильтрацией по префиксу - Минимальный HTTP-клиент для Timeweb Cloud API (вместо сломанного SDK)
- Интеграция в main.go
- Успешная сборка бинарника