Files
twcloud-scaler/README.md
Sergey Vanyushkin 191cdd108f 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
2026-05-16 13:09:07 +03:00

106 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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+
```bash
go build -o woodpecker-autoscaler ./cmd/woodpecker-autoscaler
```
При сборке на машине с ограниченной памятью используйте:
```bash
GOMAXPROCS=1 go build -p 1 -o woodpecker-autoscaler ./cmd/woodpecker-autoscaler
```
## Запуск
```bash
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)
```
## Что реализовано
- [x] Провайдер `timewebcloud` для Woodpecker Autoscaler
- [x] Создание VDS (`DeployAgent`) с cloud-init
- [x] Удаление VDS (`RemoveAgent`) по имени агента
- [x] Список развернутых агентов (`ListDeployedAgentNames`) с фильтрацией по префиксу
- [x] Минимальный HTTP-клиент для Timeweb Cloud API (вместо сломанного SDK)
- [x] Интеграция в main.go
- [x] Успешная сборка бинарника
## Ссылки
- [Woodpecker Autoscaler](https://github.com/woodpecker-ci/autoscaler)
- [Timeweb Cloud API Docs](https://timeweb.cloud/api-docs)