Continuous Integration and Continuous Deployment (CI/CD) is the backbone of modern software development. For teams and individuals who value data sovereignty, privacy, and full control over their build infrastructure, self-hosted CI/CD platforms are no longer a nice-to-have — they are a necessity.
In 2026, the landscape of self-hosted CI/CD has matured significantly. GitHub Actions set the standard for pipeline-as-code, and several open-source projects now bring that same developer experience to your own servers. This guide compares the three most compelling options: Woodpecker CI, gitea Actions, and Drone — with practical setup instructions for each.
Why Self-Host Your CI/CD Pipeline
Running your own CI/CD infrastructure delivers concrete advantages that cloud-hosted alternatives simply cannot match:
Full data control. Your source code, build artifacts, secrets, and logs never leave your network. For organizations handling sensitive intellectual property, regulated data, or client projects, this is often a compliance requirement rather than an optional preference.
Unlimited build minutes. Cloud CI providers charge by the minute or by concurrent job slots. With self-hosted infrastructure, your only limits are the hardware you provision. Running hundreds of builds a day costs nothing beyond your server’s electricity.
Custom build environments. Need a specific GPU, a licensed compiler, or access to internal network resources? Self-hosted runners can tap into any hardware or network topology you control.
Cost predictability. A single VPS with 8 CPU cores and 16 GB RAM costs roughly $40–60/month and can handle the CI/CD workload of dozens of repositories. Compare that to per-minute billing on cloud platforms during heavy development sprints.
No vendor lock-in. Your pipelines are defined in YAML files checked into your repository. If you switch platforms later, the migration is a configuration change, not a rewrite.
Woodpecker CI: The Lightweight Contender
Woodpecker CI is a community-driven fork of the original Drone CI. After Drone was acquired by Harness in 2021, the community created Woodpecker to keep the project truly open-source and independently governed. Today, Woodpecker is one of the most actively maintained CI/CD projects in the self-hosted space.
Architecture
Woodpecker follows a simple server-agent model:
- Server — receives webhooks from your Git platform, schedules pipelines, and serves the web UI
- Agent — pulls jobs from the server, executes pipeline steps inside isolated containers, and reports results back
The architecture supports multiple agents across different machines, making it easy to scale horizontally.
Key Features
- Native integration with Gitea, GitHub, GitLab, and Bitbucket
- Pipeline-as-code using
.woodpecker.ymlin your repository root - docker, Kubernetes, and local process backends
- Built-in secret management with per-repository scoping
- Matrix pipelines for testing across multiple environments simultaneously
- Approval gates for deployment stages
- Plugin ecosystem with 100+ community plugins
Installation with Docker Compose
Here is a production-ready Docker Compose setup for Woodpecker CI behind a reverse proxy:
| |
Generate a secure agent secret and start the stack:
| |
Example Pipeline
A typical Go project pipeline in Woodpecker looks like this:
| |
The matrix feature lets you test across multiple Go versions in parallel:
| |
Gitea Actions: GitHub Actions Compatibility
Gitea Actions is a built-in CI/CD system that ships with Gitea starting from version 1.19. Its defining feature is near-complete compatibility with GitHub Actions workflows. If your team already uses GitHub Actions syntax, migrating to Gitea Actions requires zero changes to your pipeline files.
Architecture
Gitea Actions integrates directly into the Gitea application:
- Gitea server — acts as both the Git platform and the workflow orchestrator
- Act runner — a standalone runner application (based on the
actproject) that executes workflow jobs
The tight integration means no separate CI server to manage — everything lives inside your existing Gitea instance.
Key Features
- Full GitHub Actions workflow syntax compatibility (
.github/workflows/*.yml) - Reuse thousands of existing GitHub Actions from the marketplace
- No additional server to deploy — runs inside Gitea
- Artifact storage and caching built into Gitea
- Runner labels for targeting specific hardware (Linux, Windows, ARM64)
- Secret and variable management at organization, repository, and environment levels
Installation
If you already run Gitea, enabling Actions requires two steps:
Step 1: Enable Actions in your app.ini:
| |
Step 2: Deploy an act runner:
| |
Register the runner by obtaining a registration token from your Gitea instance:
| |
Example Workflow
Because Gitea Actions uses GitHub Actions syntax, existing workflows work out of the box:
| |
The actions/checkout, actions/setup-node, and actions/upload-artifact actions all work without modification because Gitea Actions fetches them from the GitHub Actions marketplace at runtime.
Drone CI: The Enterprise-Grade Option
Drone CI, now owned by Harness, remains available as an open-source project. It pioneered the container-native CI/CD approach where every pipeline step runs inside an ephemeral Docker container. Drone’s commercial backing gives it enterprise features that community projects are still catching up to.
Architecture
Drone’s architecture is nearly identical to Woodpecker’s (Woodpecker was originally forked from Drone):
- Server — webhook receiver, pipeline scheduler, and web UI
- Runner — job executor that communicates with the server via gRPC
The key difference is that Drone’s open-source version has some feature limitations compared to the paid Harness offering.
Key Features
- Container-native pipeline execution (each step is a container)
- Pipeline-as-code with
.drone.yml - Support for GitHub, Gitea, GitLab, Bitbucket, and Bitbucket Server
- Approval gates and deployment targets
- Secrets management with HashiCorp Vault integration
- Pipeline signing and verification for supply chain security
- Shared pipeline configurations via templates
Installation
| |
Start the stack:
| |
Example Pipeline
| |
Feature Comparison
| Feature | Woodpecker CI | Gitea Actions | Drone CI |
|---|---|---|---|
| License | Apache 2.0 | MIT | Apache 2.0 |
| GitHub Actions Compatible | No | Yes | No |
| Git Platform Support | Gitea, GitHub, GitLab, Bitbucket | Gitea only (native) | Gitea, GitHub, GitLab, Bitbucket |
| Pipeline Syntax | Custom YAML | GitHub Actions YAML | Custom YAML |
| Matrix Builds | Yes | Yes | Via include/exclude |
| Caching | Yes (volume, S3, GCS) | Yes (built-in actions) | Yes (plugins) |
| Secret Management | Built-in, per-repo | Org, repo, env scope | Built-in, Vault integration |
| Kubernetes Backend | Yes | Via custom runner | Via Kubernetes runner |
| Pipeline Templates | Yes (central config) | Via reusable workflows | Yes (shared configs) |
| Web UI | Modern, responsive | Gitea integrated | Clean, minimal |
| Community Plugins | 100+ | GitHub Actions marketplace | 50+ |
| Active Development | Very active | Very active | Moderate |
| Governance | Community (Codeberg) | Gitea org | Harness (commercial) |
| Resource Usage | Low (~200MB server) | Medium (inside Gitea) | Low (~200MB server) |
| Minimum RAM | 512 MB | 1 GB (with Gitea) | 512 MB |
Performance and Resource Requirements
All three platforms share a similar resource profile because they rely on Docker for step isolation. Here is what you can expect on modest hardware:
Woodpecker CI — The server process uses approximately 150–250 MB of RAM and negligible CPU when idle. Each agent adds roughly 100 MB plus the memory required for active pipeline containers. A 4-core VPS with 4 GB RAM comfortably runs the server and 2 concurrent agents.
Gitea Actions — Since the orchestrator runs inside Gitea itself, the resource cost is absorbed by your existing Gitea instance. The act runner uses about 200 MB of RAM. If you already run Gitea on a 2 GB VPS, adding Actions requires bumping to 4 GB for comfortable operation.
Drone CI — Nearly identical to Woodpecker in resource consumption. The open-source version supports up to 2 concurrent pipelines per runner; the commercial version removes this limit.
For teams running fewer than 50 repositories with moderate build frequency, any single-server deployment handles the workload. Beyond that, adding agent nodes on separate machines provides linear scaling.
Security Considerations
Self-hosting CI/CD shifts the security responsibility to you. Here are the essential hardening steps that apply to all three platforms:
1. Network isolation. Place the CI/CD server behind a reverse proxy with TLS termination. Never expose the internal gRPC ponginxsed by agents) to the public internet. The Nginx configuration below demonstrates the pattern:
| |
2. Runner isolation. Run agents on a separate host or VM from the server. If a malicious pipeline escapes its container (rare but possible), it cannot reach the server’s database or secrets.
3. Container image verification. Configure runners to only pull images from your private registry, or use image digest pinning to prevent supply chain attacks:
| |
4. Secret scoping. Never store production credentials in CI/CD secrets unless the pipeline explicitly requires them. Use short-lived tokens and per-repository secret scopes to limit blast radius.
5. Resource limits. Set Docker resource constraints on runner containers to prevent a runaway build from consuming all system resources:
| |
Both Woodpecker and Drone support per-pipeline resource limits in their configuration.
Which Platform Should You Choose?
The decision comes down to your existing infrastructure and workflow preferences:
Choose Gitea Actions if you already run Gitea as your Git platform. The zero-setup integration and GitHub Actions compatibility make it the path of least resistance. Your team can reuse existing workflow files without any changes, and you maintain a single application instead of managing a separate CI server.
Choose Woodpecker CI if you want a lightweight, truly open-source CI/CD platform with strong community governance. It works with any major Git platform, has a clean modern UI, and is actively developed by a passionate community. The custom YAML syntax is straightforward and well-documented.
Choose Drone CI if you need enterprise features like Vault integration, pipeline signing, or commercial support. The open-source version is fully functional for most use cases, and the Harness backing means the project is unlikely to disappear.
For a brand-new self-hosted setup where you are choosing your entire stack from scratch, the combination of Gitea + Gitea Actions provides the most integrated experience. For teams migrating away from cloud CI who want maximum flexibility, Woodpecker CI offers the best balance of features, community, and independence.
Getting Started Checklist
Once you have selected and deployed your platform, follow these steps to onboard your first repository:
- Register an OAuth application on your Git platform and configure the client ID/secret in your CI/CD server settings
- Enable the repository in the CI/CD web UI — this registers the webhook
- Add a pipeline file (
.woodpecker.yml,.drone.yml, or.github/workflows/ci.yml) to your repository - Configure secrets for any credentials your pipeline needs (registry passwords, deployment tokens)
- Trigger your first build by pushing a commit — the webhook should fire automatically
- Monitor the build in the web UI and iterate on your pipeline configuration
With your CI/CD pipeline running on your own infrastructure, every build, every artifact, and every log entry stays under your control. That is the foundation of a truly self-hosted development workflow.
Frequently Asked Questions (FAQ)
Which one should I choose in 2026?
The best choice depends on your specific requirements:
- For beginners: Start with the simplest option that covers your core use case
- For production: Choose the solution with the most active community and documentation
- For teams: Look for collaboration features and user management
- For privacy: Prefer fully open-source, self-hosted options with no telemetry
Refer to the comparison table above for detailed feature breakdowns.
Can I migrate between these tools?
Most tools support data import/export. Always:
- Backup your current data
- Test the migration on a staging environment
- Check official migration guides in the documentation
Are there free versions available?
All tools in this guide offer free, open-source editions. Some also provide paid plans with additional features, priority support, or managed hosting.
How do I get started?
- Review the comparison table to identify your requirements
- Visit the official documentation (links provided above)
- Start with a Docker Compose setup for easy testing
- Join the community forums for troubleshooting