Woodpecker CI
A container-native continuous integration engine using repository pipelines, agents, and Forge integrations.
Why consider Woodpecker CI?
Woodpecker CI is an open-source, community-driven continuous integration engine that executes declarative pipeline steps inside isolated containers. It connects with popular Git platforms like GitHub, GitLab, Gitea, and Forgejo to automate software testing, building, and deployment.
Learn Woodpecker CI by building
Practical setup notes, real use cases, and copy-ready examples in one focused guide.
In this guide3 sections
Automating CI/CD Pipelines with Woodpecker CI
According to the official project documentation, Woodpecker is a simple, yet powerful CI/CD engine with great extensibility. It is developed as an open-source automation platform designed to execute pipeline tasks inside isolated container environments. By building on top of container primitives, teams can ensure their continuous integration workflows run deterministically regardless of the underlying host machine. Woodpecker is distributed under the Apache License (Woodpecker is distributed under the Apache License Version 2.0, January 2004).
Architecture and Core Components
Woodpecker divides its workload across distinct architectural elements to provide scalability and operational resilience. As detailed in the administration architecture guide, the server provides the user interface, processes webhook requests to the underlying forge, serves the API and analyzes the pipeline configurations from the YAML files. This central control plane tracks repository settings, manages user permissions via OAuth integration, and coordinates execution queues.
Worker nodes handle the actual computation required to test and build software artifacts. According to the general administration manual, the agent executes the workflows via a specific backend (Docker, Kubernetes, local) and connects to the server via GRPC. This modular backend architecture allows teams to run build jobs across different compute pools, ranging from local developer machines to full Kubernetes clusters.
To accommodate fluctuating build volumes without maintaining idle computing resources, Woodpecker provides dynamic provisioning capabilities. As documented in the general administration overview, the autoscaler allows spinning up new VMs on a cloud provider of choice to process pending builds. When build queues clear, the autoscaler terminates unused virtual machines to optimize operational costs.
For persistent state storage, the application provides flexible database backend options. As noted in the administration documentation, Woodpecker uses a SQLite database by default, which requires no installation or configuration. For larger instances it is recommended to use it with a Postgres or MariaDB instance. This zero-configuration default allows teams to get started immediately, while enterprise deployments can leverage dedicated relational databases.
Defining Pipeline Workflows
Workflows in Woodpecker are configured through declarative YAML files stored directly within your source control repositories. According to the workflow syntax documentation, the Workflow section defines a list of steps to build, test and deploy your code. The steps are executed serially in the order in which they are defined. If any single step exits with an unexpected non-zero status code, pipeline execution halts unless explicit failure handling rules are specified.
Each step runs within its own containerized runtime environment rather than relying on tools pre-installed on the host. As explained in the workflow syntax guide, Woodpecker pulls the defined image and uses it as environment to execute the workflow step commands, for plugins and for service containers. The repository workspace is mounted automatically into each container, preserving built files and changes across sequential pipeline steps.
steps: - name: backend image: golang commands: - go build - go test - name: frontend image: node commands: - npm install - npm run test - npm run buildDevelopers can also control execution triggers directly from commit messages when minor changes do not require full automated testing. According to the workflow documentation, Woodpecker gives the ability to skip individual commits by adding [SKIP CI] or [CI SKIP] to the commit message. This prevents unnecessary resource consumption for documentation updates or trivial metadata adjustments.
Deploying with Docker Compose
The most standard self-hosted deployment pattern combines the server and agent services within a single compose file. As outlined in the Docker Compose installation documentation, it creates persistent volumes for the server and agent config directories. The bundled SQLite DB is stored in /var/lib/woodpecker and is the most important part to be persisted as it holds all users and repository information.
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:Once configured, the system provides an end-to-end continuous integration pipeline that runs entirely on self-managed infrastructure. You can track project updates, inspect releases, and contribute directly via the GitHub repository, while reviewing the latest official distribution tagged on the releases page.
Related tools
More options with a similar category or technology profile.
Dapr CLI
Command-line tool for managing Dapr distributed application runtime environments and sidecars.
bpytop
Python port of bashtop with game-like UI, responsive mouse support, and hardware sensors.
bashtop
Linux resource monitor showing usage and stats for processor, memory, disks, network, and processes.
SchemaHero
Kubernetes-native declarative database schema management and table migration operator.