Woodpecker CI, без жодного SaaS у ланцюжку

Сервер і агенти на одній невеликій машині в Празі чи Ковільяні, під'єднані до вашої власної кузні, - версія CI, у якій ніщо з конвеєра не залишає інфраструктури, яку ви можете назвати.

Сертифіковано за Tier III ISO 9001 ISO/IEC 27001 ISO 14001 Відповідає GDPR

Для кого це

Команда, яка вже розміщує в себе все інше

Кузня ваша, реєстр ваш, ціль розгортання ваша - а CI лишається єдиним переходом, що досі виходить за межі будівлі, саме тим переходом, який тримає код.

Інсталяція Drone, що зупинилася

Woodpecker - це форк, який пішов далі й лишився під Apache-2.0. Міграція невелика; питання в тому, на чому це запускати.

Невелика команда, яка хоче, щоб CI було нудним

Два контейнери, файл YAML на репозиторій, жодної площини керування, яку треба вивчати, і жодного лічильника хвилин, за яким треба стежити. Йому потрібне лише місце, де жити.

Що дає ця форма

  • Сервер і агент як два контейнери на одному хості, достатньо малому, щоб CI перестало бути інфраструктурним проєктом.
  • Будь-яка кузня, яку підтримує Woodpecker - GitHub, GitLab, Gitea, Forgejo чи Bitbucket, - зокрема й та, що ви розмістили самі в тій самій мережі.
  • Агенти, додані згодом як окремі хости, усі автентифіковані на тому самому сервері, коли однієї машини вже замало.
  • Apache-2.0 наскрізь, тож ніщо в конвеєрі не залежить від рішення постачальника зберігати безкоштовний тариф.
  • Статична IPv4 з AS204057, щоб вебхук кузні й ціль розгортання мали одну адресу, якій можна довіряти.
  • Локальний NVMe для робочого каталогу й кешу шарів Docker, теплий між конвеєрами.

Розмір за тим, що конвеєр робить насправді

Сам Woodpecker легкий: сервер - невеликий процес на Go з вбудованою базою даних, доки ви не спрямуєте його на Postgres, а агент - наглядач, що запускає контейнери. Хост споживає збірка, точно як із будь-яким іншим runner, - тож підбирайте машину за найважчим завданням і дайте диску місце під кеш шарів, який робить другий конвеєр швидким. Початковий розмір нижче з запасом тримає сервер і агента разом для невеликої команди. Єдине чесне застереження: фіксований місячний хост коштує так само у тиждень без пушів, коли розміщені хвилини CI не коштують нічого.

Перший раннер
15.00
на місяць

Замовити
сервер і один агент разом
2 vCPU
4 GB RAM
64 GB NVMe
1 статична IPv4
1 щотижнева резервна копія включена
Раннер для команди
19.96
на місяць

Замовити
сервер плюс кілька паралельних workflow
4 vCPU
8 GB RAM
120 GB NVMe
1 статична IPv4
1 щотижнева резервна копія включена
Навантажений пул
39.90
на місяць

Замовити
виділений хост агента поруч із сервером
8 vCPU
16 GB RAM
240 GB NVMe
1 статична IPv4
1 щотижнева резервна копія включена

Як встановити Woodpecker CI з Docker Compose

Сервер і агент на одному хості, у цьому прикладі під'єднані до GitHub. Замініть блок кузні на змінні Gitea, Forgejo, GitLab чи Bitbucket, якщо ваша кузня одна з них.

  1. Встановіть Docker і Compose

    sudo apt install docker.io docker-compose-v2
    sudo systemctl enable --now docker

    Обидва контейнери й кожен крок конвеєра працюють на цьому демоні, тож це єдина залежність, потрібна хосту.

  2. Зареєструйте застосунок OAuth у вашій кузні

    # GitHub: Settings -> Developer settings -> OAuth Apps -> New OAuth App
    # Homepage URL:     https://ci.example.com
    # Authorization callback: https://ci.example.com/authorize

    Woodpecker автентифікує користувачів через кузню і з цим дозволом читає репозиторії, тож ідентифікатор клієнта й секрет, які вона повертає, - це те, що потрібне серверу. Кожна підтримувана кузня має відповідну форму.

  3. Згенеруйте спільний секрет агента

    openssl rand -hex 32

    Сервер і агенти автентифікують одне одного цим рядком, а документація Woodpecker називає саме цю команду для його створення. Тримайте його поза файлом compose - покладіть у файл .env поруч.

  4. Напишіть файл compose

    services:
      woodpecker-server:
        image: woodpeckerci/woodpecker-server:v3
        ports:
          - 8000:8000
        volumes:
          - woodpecker-server-data:/var/lib/woodpecker/
        environment:
          - WOODPECKER_OPEN=true
          - WOODPECKER_HOST=${WOODPECKER_HOST}
          - WOODPECKER_GITHUB=true
          - WOODPECKER_GITHUB_CLIENT=${WOODPECKER_GITHUB_CLIENT}
          - WOODPECKER_GITHUB_SECRET=${WOODPECKER_GITHUB_SECRET}
          - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
      woodpecker-agent:
        image: woodpeckerci/woodpecker-agent:v3
        command: agent
        restart: always
        depends_on:
          - woodpecker-server
        volumes:
          - woodpecker-agent-config:/etc/woodpecker
          - /var/run/docker.sock:/var/run/docker.sock
        environment:
          - WOODPECKER_SERVER=woodpecker-server:9000
          - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
    volumes:
      woodpecker-server-data:
      woodpecker-agent-config:

    Це приклад від розробників. WOODPECKER_HOST - публічна URL-адреса, до якої звертаються користувачі й вебхуки, порт 8000 - вебінтерфейс, а 9000 - порт gRPC, до якого під'єднуються агенти. WOODPECKER_OPEN=true впускає будь-кого з обліковим записом у кузні - вимкніть це, щойно ваша команда зареєструється.

  5. Запустіть

    docker compose up -d
    docker compose logs -f woodpecker-agent

    Агент під'єднується до сервера зі спільним секретом і сам реєструється при першому контакті. Якщо він зациклюється на помилці автентифікації, два секрети не збігаються - найчастіше тому, що файл .env не було прочитано.

  6. Додайте конвеєр

    when:
      - event: push
    
    steps:
      - name: smoke
        image: alpine:latest
        commands:
          - cat /etc/os-release
          - echo "built on $CI_MACHINE"

    Закомітьте це як .woodpecker.yaml, увімкніть репозиторій у вебінтерфейсі, щоб створився вебхук, і запуште. Кожен крок - це контейнер, і саме тому агенту потрібен сокет Docker.

Звірено з офіційною документацією 2026-08-15 — читати першоджерело

Чим ми не є

  • Ми не проєкт Woodpecker. Woodpecker CI - незалежний проєкт під Apache-2.0, і ніщо тут ним не схвалене. Ми продаємо машину, на якій він працює.
  • На цій сторінці ми не розміщуємо вашу кузню. Gitea, Forgejo чи самокерований GitLab поруч - це нескладний другий сервер, але інший розмір і інша пропозиція.
  • Ми не пишемо ваші конвеєри. YAML ваш; хост, мережа й адреса - наші.
  • Woodpecker типово не обслуговується за вас. Два контейнери запускаєте ви або додаєте нашу послугу адміністрування, і ми тримаємо їх оновленими та з резервними копіями.
  • Монтування сокета Docker в агента дає крокам конвеєра дуже велику владу над хостом. Саме так працює цей задум, і це причина тримати агента на машині, яка більше нічого не робить.

Частини, які команди виявляють запізно

  • WOODPECKER_AGENT_SECRET має два режими. Однакове значення на сервері й усіх агентах - це системний токен; токен на кожного агента з'являється, якщо спершу зареєструвати агента в інтерфейсі, чого ви й хочете, щойно до хоста може дістатися більш ніж одна команда.
  • Кожна чутлива змінна має також форму _FILE, тож секрет можна прочитати зі змонтованого файлу, а не тримати у файлі compose чи в середовищі.
  • Вбудована база даних годиться для початку і все одно є першим, що варто перенести. Спрямуйте сервер на Postgres, перш ніж інсталяція почне для когось важити.
  • WOODPECKER_OPEN=true означає, що будь-який обліковий запис у під'єднаній кузні може увійти. Зручно першого дня і хибно тридцятого.
  • Агенту потрібен сокет Docker, бо кожен крок - це контейнер, що фактично дає конвеєру root на цьому хості. Тримайте хост агента нудним і окремим.
  • WOODPECKER_HOST має бути тією URL-адресою, до якої кузня справді може дістатися, а не внутрішньою: вебхук створюється саме на неї, і приватна адреса тут дає конвеєри, які ніколи не спрацьовують.

Хвилини CI у провайдера проти власного runner

Хвилини CI на боці провайдераРаннер на DCXV
За що ви платитеЗа кожну хвилину кожного завдання, доки існує проєктЗа фіксований місячний хост, хоч би що конвеєр робив того місяця
Збірка, що сповільнюєтьсяКоштує більше кожного місяця, поки лишається повільноюНе коштує нічого більше - машина вже оплачена
Кеш шарів DockerХолодний на кожному завданні, якщо ви самі його не вивантажите й не завантажитеТеплий на локальному NVMe, між завданнями і між днями
ПаралельністьЩабель тарифу, який підвищуютьЧисло, яке ви задаєте у власному файлі конфігурації
Куди потрапляє checkoutНа спільний парк машин, часто в регіоні, який неможливо зафіксуватиНа одну машину в Празі чи Ковільяні, за кіпрським договором
Вихідна адресаВеличезний спільний діапазон, який нічим не дозволитиОдна статична IPv4 з AS204057, ваша, щоб її дозволяти
Що може вмістити машинаТе, що випадково несе образ runnerБудь-який набір інструментів, ліцензію чи набір тестових даних, встановлений один раз

Як це запускається на вашому хості

1

Скажіть, що робить конвеєр

Найважче завдання, яке ви виконуєте сьогодні, скільки їх має йти одночасно і чи збирає воно образи контейнерів. Цього досить, щоб підібрати хост без здогадок.

2

Ми передаємо машину

Прага чи Ковільян, доступ root і статична IPv4, менш ніж за десять хвилин. Принесіть власний образ, якщо runner уже всередині нього.

3

Виконайте покрокову інструкцію з цієї сторінки

Це послідовність від виробника, взята з його чинної документації, а не з допису в блозі, і на чистому хості вона займає кілька хвилин.

4

Зробіть знімок, а тоді додайте другий

Зробіть знімок, щойно перший конвеєр стане зеленим, щоб наступна машина була відновленням, а не побудовою з нуля. Пул росте додаванням хостів, а не роздуванням одного.

Чому обирають нас

  • Сертифіковані об'єкти Tier III, SLA об'єкта 99.982%
  • Власна мережа, AS204057, IPv4 та IPv6
  • Підтримка 24/7/365 із середнім часом відповіді близько 10 хвилин
  • Компанія на Кіпрі, юрисдикція ЄС, відповідність GDPR з 2007 року

FAQ

- Що таке Woodpecker CI?

Легкий рушій CI під Apache-2.0, форк Drone, що працює як сервер плюс один або кілька агентів. Кожен крок конвеєра - контейнер, конвеєри описані файлом YAML у репозиторії, а вхід іде через вашу кузню. Підтримуються GitHub, GitLab, Gitea, Forgejo і Bitbucket, зокрема екземпляри, які ви розміщуєте самі

- Як встановити Woodpecker CI?

Docker Compose - задокументований шлях: один контейнер woodpecker-server із портом 8000 і один контейнер woodpecker-agent зі змонтованим сокетом Docker, які поділяють секрет, згенерований командою openssl rand -hex 32, плюс ідентифікатор клієнта й секрет OAuth вашої кузні. Файл compose від розробників і кроки навколо нього є на цій сторінці

- Що таке WOODPECKER_AGENT_SECRET і як його згенерувати?

Це спільний секрет, яким автентифікуються сервер і агенти, і документація Woodpecker називає для його створення openssl rand -hex 32. Однакове значення всюди робить із нього системний токен; попередня реєстрація агента в інтерфейсі дає цьому агенту власний токен, чого ви й хочете, щойно до хоста може дістатися більш ніж одна команда. Кожна чутлива змінна має також форму _FILE, щоб читати значення зі змонтованого файлу

- Якого розміру сервер потрібен Woodpecker?

Саме програмне забезпечення легке - сервер є невеликим процесом на Go з вбудованою базою даних, доки ви не спрямуєте його на Postgres, а агент є наглядачем, що запускає контейнери. Машину споживає збірка. 2 vCPU, 4 ГБ і 64 ГБ NVMe тримають сервер і агента разом для невеликої команди; переходьте на виділений хост агента, щойно конвеєри почнуть ставати в чергу

- Навіщо агенту сокет Docker?

Бо кожен крок конвеєра - це контейнер, який агент запускає на демоні хоста. Це фактично дає крокам конвеєра root на цій машині, що є задумом, а не хибним налаштуванням, - і це причина тримати агента на хості, який більше нічого не робить, що недорого, коли друга машина коштує 15 EUR на місяць

- Мої конвеєри ніколи не спрацьовують. У чому річ?

У дев'яти випадках із десяти річ у WOODPECKER_HOST. Це значення є публічною URL-адресою, яку кузня використовує, створюючи вебхук, тож внутрішня адреса тут дає інсталяцію, що виглядає здоровою і ніколи не отримує пушу. Другий поширений випадок - WOODPECKER_OPEN=true: це не проблема спрацьовування, але означає, що будь-який обліковий запис у вашій кузні може увійти - зручно першого дня, хибно тридцятого

Якщо вам потрібна допомога або у вас виникли додаткові питання, будь ласка, звертайтеся до менеджерів або напишіть у службу підтримки за адресою support@dcxv.com

Готові розпочати?

Оплата щомісяця, без плати за підключення, без прив'язки

Хмарні сервери від 15 €/міс