ScriptsApr 10, 2026·3 min read

Woodpecker CI — Simple Yet Powerful CI/CD Engine

Woodpecker is a lightweight, container-based CI/CD engine forked from Drone. Simple YAML pipelines, Docker-native execution, and multi-platform support.

TL;DR
Woodpecker CI runs container-based pipelines defined in simple YAML with Docker-native execution.
§01

What it is

Woodpecker CI is a lightweight, container-based CI/CD engine forked from Drone. Every pipeline step runs in an isolated Docker container, defined in a simple YAML file. It integrates with GitHub, GitLab, Gitea, Forgejo, and Bitbucket.

Woodpecker targets small to mid-size teams and self-hosters who want CI/CD without the complexity of Jenkins or the cost of GitHub Actions minutes.

§02

How it saves time or tokens

Woodpecker pipelines are minimal YAML. A typical build-test-deploy pipeline is 20 lines. There is no plugin marketplace to navigate because any Docker image is a valid pipeline step. Need node:20? Use it directly. Need postgres:16 as a service? Add it as a service block.

Self-hosting Woodpecker on a $5/month VPS gives you unlimited build minutes, compared to GitHub Actions' 2,000 free minutes per month.

§03

How to use

  1. Deploy Woodpecker server: docker compose up -d with the official compose file
  2. Register your Git forge (GitHub, GitLab, Gitea) as an OAuth app
  3. Activate your repository in the Woodpecker UI
  4. Add a .woodpecker.yml file to your repository root
§04

Example

# .woodpecker.yml
steps:
  - name: build
    image: node:20-alpine
    commands:
      - npm ci
      - npm run build

  - name: test
    image: node:20-alpine
    commands:
      - npm test

  - name: deploy
    image: alpine/curl
    commands:
      - curl -X POST https://deploy.example.com/webhook
    when:
      branch: main
      event: push

services:
  - name: database
    image: postgres:16
    environment:
      POSTGRES_DB: test
      POSTGRES_PASSWORD: test
§05

Related on TokRepo

§06

Common pitfalls

  • Woodpecker uses .woodpecker.yml by default, not .drone.yml; migrating from Drone requires renaming and minor syntax adjustments
  • Agent-server communication requires proper networking; in Docker setups, ensure the agent can reach the server's gRPC port
  • Secret management is per-repository in the UI; there is no global secret store without a plugin or external vault

Frequently Asked Questions

How does Woodpecker compare to Drone?+

Woodpecker is a community fork of Drone created after Drone's acquisition by Harness. Woodpecker remains fully open source (Apache 2.0) and community-maintained. The pipeline syntax is largely compatible, but Woodpecker has diverged with its own plugin ecosystem and UI improvements.

Can Woodpecker run on Kubernetes?+

Yes. Woodpecker supports a Kubernetes backend where pipeline steps run as Kubernetes pods instead of Docker containers. This is useful for teams already running Kubernetes clusters and wanting to reuse compute resources.

Does Woodpecker support parallel steps?+

Yes. Steps without dependencies run in parallel by default. You can control execution order with the depends_on field. Matrix builds are also supported for running the same pipeline across multiple configurations.

What Git forges does Woodpecker support?+

Woodpecker integrates with GitHub, GitLab, Gitea, Forgejo, and Bitbucket. Each forge requires an OAuth application for authentication. Gitea and Forgejo are first-class integrations since many Woodpecker users are self-hosters.

How do I add secrets to Woodpecker pipelines?+

Add secrets in the Woodpecker UI under your repository settings. Reference them in YAML using the secrets field on a step. Secrets are injected as environment variables and masked in logs.

Citations (3)

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets