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

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
  • Успешная сборка бинарника

Ссылки

Description
Woodpecker CI autoscaler provider for Timeweb Cloud
Readme 83 KiB
Languages
Go 88.7%
Makefile 9.6%
Dockerfile 1.6%
TypeScript 0.1%