Esta página se muestra en inglés. Una traducción al español está en curso.
ScriptsApr 10, 2026·3 min de lectura

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.

Introducción

Woodpecker CI is a community-driven, lightweight CI/CD engine that runs pipelines in containers. Originally forked from Drone CI, Woodpecker focuses on simplicity, extensibility, and community governance. It uses simple YAML pipeline definitions and executes every step in an isolated Docker container.

With 6.8K+ GitHub stars and Apache-2.0 license, Woodpecker is popular among self-hosters and small teams who want a simple, self-hosted CI/CD solution without the complexity of Jenkins or GitLab CI.

What Woodpecker Does

  • Container-Native: Every pipeline step runs in its own Docker container
  • YAML Pipelines: Simple, readable pipeline definitions in .woodpecker.yml
  • Multi-Platform: Build for linux/amd64, arm64, arm, and windows
  • Git Integration: GitHub, GitLab, Gitea, Forgejo, and Bitbucket support
  • Parallel Execution: Run steps and pipelines in parallel
  • Matrix Builds: Test across multiple versions/configurations
  • Secrets Management: Encrypted secrets per repository or organization
  • Plugins: 100+ community plugins for Docker, Slack, S3, etc.
  • Cron Jobs: Schedule periodic pipeline runs

Architecture

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Git Forge   │────▶│  Woodpecker  │────▶│  Woodpecker  │
│  (GitHub/    │webhook│  Server     │     │  Agent(s)    │
│  Gitea/etc)  │     │  (Go)        │     │  (Docker)    │
└──────────────┘     └──────────────┘     └──────────────┘
  • Server: Handles webhooks, manages pipelines, serves web UI
  • Agent: Executes pipeline steps in Docker containers (can run on multiple machines)

Self-Hosting

Docker Compose

services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:latest
    ports:
      - "8000:8000"
    environment:
      WOODPECKER_OPEN: "true"
      WOODPECKER_HOST: https://ci.yourdomain.com
      WOODPECKER_GITHUB: "true"
      WOODPECKER_GITHUB_CLIENT: your-github-oauth-client-id
      WOODPECKER_GITHUB_SECRET: your-github-oauth-client-secret
      WOODPECKER_AGENT_SECRET: your-shared-agent-secret
    volumes:
      - woodpecker-data:/var/lib/woodpecker

  woodpecker-agent:
    image: woodpeckerci/woodpecker-agent:latest
    environment:
      WOODPECKER_SERVER: woodpecker-server:9000
      WOODPECKER_AGENT_SECRET: your-shared-agent-secret
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

volumes:
  woodpecker-data:

With Gitea

environment:
  WOODPECKER_GITEA: "true"
  WOODPECKER_GITEA_URL: https://gitea.yourdomain.com
  WOODPECKER_GITEA_CLIENT: your-gitea-oauth-client-id
  WOODPECKER_GITEA_SECRET: your-gitea-oauth-client-secret

Pipeline Examples

Basic CI

# .woodpecker.yml
steps:
  - name: install
    image: node:20
    commands:
      - npm ci

  - name: lint
    image: node:20
    commands:
      - npm run lint

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

  - name: build
    image: node:20
    commands:
      - npm run build

With Services (Database Testing)

steps:
  - name: test
    image: python:3.12
    commands:
      - pip install -r requirements.txt
      - pytest --db-url=postgresql://test:test@postgres:5432/testdb

services:
  - name: postgres
    image: postgres:16
    environment:
      POSTGRES_USER: test
      POSTGRES_PASSWORD: test
      POSTGRES_DB: testdb

Docker Build & Push

steps:
  - name: build-and-push
    image: woodpeckerci/plugin-docker-buildx
    settings:
      repo: myregistry.com/myapp
      tags: latest,${CI_COMMIT_SHA:0:8}
      username:
        from_secret: docker_username
      password:
        from_secret: docker_password
    when:
      branch: main
      event: push

Matrix Builds

matrix:
  GO_VERSION:
    - "1.21"
    - "1.22"
  DATABASE:
    - postgres
    - mysql

steps:
  - name: test
    image: golang:${GO_VERSION}
    commands:
      - go test ./... -db=${DATABASE}

Multi-Pipeline (Parallel)

# .woodpecker/test.yml
steps:
  - name: test
    image: node:20
    commands:
      - npm test

# .woodpecker/deploy.yml
depends_on:
  - test
steps:
  - name: deploy
    image: alpine
    commands:
      - ./deploy.sh
    when:
      branch: main

Woodpecker vs Alternatives

Feature Woodpecker Drone GitHub Actions Jenkins Gitea Actions
Open Source Yes (Apache-2.0) Yes (mixed) No Yes (MIT) Yes
Container-native Yes Yes Yes Plugin Yes
Self-hosted Yes Yes Enterprise Yes Yes (with Gitea)
Config YAML YAML YAML Groovy YAML (GH compat)
Complexity Low Low Medium High Low
Resource usage ~50MB ~50MB N/A ~1GB+ Part of Gitea
Community Growing Declining Large Very large Growing

FAQ

Q: What's the relationship between Woodpecker and Drone? A: Woodpecker is a community fork of Drone CI, created after Drone moved in a more commercial direction. Woodpecker stays 100% open source and community-governed, and continues to add new features (multi-pipeline, Cron, UI improvements).

Q: Does it work well with Gitea? A: It's a great fit. Woodpecker + Gitea is the most popular self-hosted Git + CI/CD combo — simple to configure, low resource consumption, and a perfect self-hosted alternative to GitHub + Actions.

Q: Does it support Kubernetes executors? A: Yes. In addition to the Docker agent, Woodpecker offers a Kubernetes backend that runs pipeline steps as K8s Pods.

Sources & Credits

Discusión

Inicia sesión para unirte a la discusión.
Aún no hay comentarios. Sé el primero en compartir tus ideas.

Activos relacionados