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:
105
README.md
Normal file
105
README.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user