SelfHostStackOpen-Source Directory

Why Migrate Away from CircleCI, Travis CI & Bitbucket Pipelines?

Cloud CI vendors price by the minute and by concurrency: free tiers evaporate quickly for any team that runs real test suites, and organizations with 10-50 developers routinely pay $100-$2,000+/mo. Your source code and build artifacts also transit third-party infrastructure, and during release crunches shared queues throttle your deployments. Self-hosting Woodpecker or Concourse gives you unmetered build minutes on your own hardware, unlimited parallel jobs bounded only by your runners, full utilization of the private compute you already rent, and complete control over the build environment, secrets, and artifacts.

Technical Architecture & Migration Analysis

Cloud CI (CircleCI, Travis, Bitbucket Pipelines) schedules builds on shared vendor infrastructure, meters every job minute against plan quotas, and enforces concurrency ceilings that create queueing during release crunch. Self-hosted engines flip the economics: Woodpecker runs a Go server that dispatches jobs to your own agents, each pipeline step executing in an isolated Docker container on your hardware — unlimited parallel jobs cost nothing beyond the compute you already rent. Concourse uses a resource-oriented model where declarative pipelines subscribe to git, image, and artifact resources, executed by a worker pool you size to your own throughput. In both cases secrets, artifacts, and build logs never leave your infrastructure.

⚠️

When NOT to Migrate (When Staying on CircleCI, Travis CI & Bitbucket Pipelines Makes Sense)

Self-hosting is not universally the right move. Keep paying for SaaS if your team hits any of these constraints:

  • Your team burns fewer build minutes than the free tier of your current SaaS (e.g. under ~6,000 credits/month) and never hits concurrency limits.
  • You need turnkey hosted build execution with zero ops: no runners to patch and no Docker daemon to babysit.
  • Your macOS/iOS builds must run on Apple-hosted runners (self-hosting macOS agents requires owning Apple hardware).

Real-World Cost Comparison: CircleCI, Travis CI & Bitbucket Pipelines vs Self-Hosted

Comparing vendor cloud billings against standard Hetzner / DigitalOcean infrastructure costs at scale.

Tier / ScaleCircleCI, Travis CI & Bitbucket Pipelines CostSelf-Hosted VPS CostEstimated Annual SavingsTechnical Breakdown
Hobby / Small Team
~1,500 minutes/month, 2 developers, single repo
$0 (free tiers) — but free minutes are consumed quickly by real test suites€3.79/month (Hetzner CX22 2 vCPU, 4GB RAM)Break-even vs free tier; removes queueing and quota anxietyWoodpecker server + 1 agent fits a 4GB VPS.
Growth Startup
~10,000 minutes/month, 10 developers, parallel releases
$30 - $100/month (CircleCI Performance plans)€14.28/month (Hetzner CPX31 4 vCPU, 8GB RAM)$300 - $1,100/yearUnlimited parallel containers on one 8GB node with multi-workflow agents.
Scale-up / Agency Fleet
100,000+ minutes/month, multiple repos, many teams
$500 - $2,000+/month (Scale plans, concurrency add-ons)€14.28 - €37.90/month (2-3 dedicated nodes)$5,800 - $23,500+/yearPrivate runner cluster utilization — you already pay for the compute you deploy on.

Top 2 Recommended Open-Source Replacements

Tested, self-contained, and production-ready. Click any tool to inspect verified docker-compose configurations, hardware sizing, and deployment guides.

Woodpecker CI

Apache-2.0⭐ 5.8k+

Lightweight, container-native CI/CD engine. Pipelines run as Docker containers on your own agents with no concurrency fees.

Min RAM512 MB
Min CPU1 vCPU
GitHub Repo ↗

✅ Advantages

  • Very lightweight, fast to deploy, low RAM
  • Zero cost for private builds and parallel jobs
  • Simple YAML that maps directly to Docker steps

⚠️ Trade-offs / Limitations

  • Container-based steps require publishing custom images for exotic toolchains
  • No macOS runners on Linux hosts

Core Features

Container-native pipelines where each step runs in its own ephemeral Docker container
Unlimited private runners and parallel workflows with zero concurrency fees
GitHub, Gitea, GitLab, Bitbucket, and Forgejo source control integration
YAML pipeline config with secrets, matrix builds, and service containers
Tiny footprint: server + agent fit in ~512MB RAM

Architecture Notes

Go-based server + agent architecture. Pipelines execute as Docker containers; agents pull jobs from the server, spin a container per step, and report results. GitHub, Gitea, GitLab, Forgejo, and Bitbucket authentication.

Known Limitations

Pipelines run as containers, so every step needs a container image; macOS/iOS builds require a Mac agent on your own Apple hardware.

Official Documentation ↗
📄 docker-compose.yml
Production Ready
version: '3.8'
services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:latest
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      - WOODPECKER_HOST=https://ci.yourdomain.com
      - WOODPECKER_OPEN=true
      - WOODPECKER_ADMIN=admin
      - WOODPECKER_GITHUB=true
      - WOODPECKER_GITHUB_CLIENT=your_github_oauth_client_id
      - WOODPECKER_GITHUB_SECRET=your_github_oauth_client_secret
      - WOODPECKER_AGENT_SECRET=32_char_shared_agent_secret_here
    volumes:
      - woodpecker_server_data:/var/lib/woodpecker
  woodpecker-agent:
    image: woodpeckerci/woodpecker-agent:latest
    restart: unless-stopped
    environment:
      - WOODPECKER_SERVER=woodpecker-server:9000
      - WOODPECKER_AGENT_SECRET=32_char_shared_agent_secret_here
      - WOODPECKER_MAX_WORKFLOWS=2
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
  woodpecker_server_data:

🚀 5-Minute Deployment Guide

  1. 1Provision a VPS with at least 1GB RAM and install Docker & Docker Compose.
  2. 2Register an OAuth App in GitHub (or Gitea/GitLab) for push and PR webhooks.
  3. 3Save the compose template, set WOODPECKER_HOST and the shared agent secret.
  4. 4Run `docker compose up -d` and open https://ci.yourdomain.com.
  5. 5Push your first `.woodpecker.yml` pipeline definition to trigger a build.

Recommended Cloud VPS for Woodpecker CI

Compare all VPS hosts →
Hetzner Cloud€3.79/mo

CX22 (2 vCPU, 4GB RAM)

Runs server + one agent; scale by adding agents on the same or extra nodes.

Deploy on Hetzner →
DigitalOcean$24.00/mo

Regular Droplet (2 vCPU, 4GB RAM, 80GB SSD)

Includes $200 in free trial credits for new accounts.

Claim $200 DO Credit →

Concourse CI

Apache-2.0⭐ 8.2k+

Declarative, resource-driven CI/CD with reproducible pipelines and a scale-out worker pool.

Min RAM2 GB
Min CPU2 vCPU
GitHub Repo ↗

✅ Advantages

  • Excellent for complex, long-running, and regulated pipelines
  • Reproducible declarative configs with strong auditability
  • Scale-out worker pool with no per-minute concurrency billing

⚠️ Trade-offs / Limitations

  • Steeper learning curve for small projects
  • Heavier footprint than lightweight alternatives

Core Features

Declarative pipelines built around typed resources (git, images, S3, timers)
Every pipeline is fully reproducible from its declarative config
Pausable jobs, build history, and a visual pipeline dashboard
Pluggable resources extensible via the community resource ecosystem
Scales to large fleets of workers with parallel builds

Architecture Notes

Go-based ATC (web UI + API) and worker fleet. Uses a resource model: every pipeline input/output is a typed resource (git repo, image, S3 artifact, Slack message) and workers execute containers in a Garden runtime.

Known Limitations

The declarative, resources-first model has a learning curve versus classic step-based CI; requires at least 2GB RAM for the web node.

Official Documentation ↗
📄 docker-compose.yml
Production Ready
version: '3.8'
services:
  concourse-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=concourse
      - POSTGRES_USER=concourse
      - POSTGRES_PASSWORD=concourse_pwd_2026
    volumes:
      - concourse_db_data:/var/lib/postgresql/data
  concourse:
    image: concourse/concourse:latest
    restart: unless-stopped
    command: quickstart
    ports:
      - "8080:8080"
    depends_on:
      - concourse-db
    environment:
      - CONCOURSE_POSTGRES_HOST=concourse-db
      - CONCOURSE_POSTGRES_USER=concourse
      - CONCOURSE_POSTGRES_PASSWORD=concourse_pwd_2026
      - CONCOURSE_EXTERNAL_URL=https://ci.yourdomain.com
      - CONCOURSE_ADD_LOCAL_USER=admin:admin_pwd_2026
      - CONCOURSE_MAIN_TEAM_LOCAL_USER=admin
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
  concourse_db_data:

🚀 5-Minute Deployment Guide

  1. 1Provision a 2GB+ RAM VPS and install Docker & Docker Compose.
  2. 2Save the compose template and set a strong local user password.
  3. 3Run `docker compose up -d` and open https://ci.yourdomain.com.
  4. 4Log in with the local user and set up the `fly` CLI.
  5. 5Write a declarative pipeline.yml, run `fly set-pipeline`, and unpause it to start building.

Recommended Cloud VPS for Concourse CI

Compare all VPS hosts →
Hetzner Cloud€3.79/mo

CX22 (2 vCPU, 4GB RAM)

Handles the ATC web node; add worker nodes for heavier parallel builds.

Deploy on Hetzner →
DigitalOcean$24.00/mo

Regular Droplet (2 vCPU, 4GB RAM, 80GB SSD)

Includes $200 in free trial credits for new accounts.

Claim $200 DO Credit →

Quick Specification Matrix

ToolLicenseMin RAMMin CPUGitHub RepoPrimary Advantage
CircleCI, Travis CI & Bitbucket Pipelines (Proprietary)Proprietary ClosedManaged CloudManaged CloudN/ATurnkey onboarding with vendor lock-in & paywalls
Woodpecker CIApache-2.0512 MB1 vCPUwoodpecker-ci/woodpeckerVery lightweight, fast to deploy, low RAM
Concourse CIApache-2.02 GB2 vCPUconcourse/concourseExcellent for complex, long-running, and regulated pipelines

Performance Benchmarks & Hard Operational Limits

Real-world operational trade-offs, resource consumption limits, and measured throughput.

Benchmark MetricCircleCI, Travis CI & Bitbucket Pipelines BaselineSelf-Hosted Alternative MetricOperational Bottleneck / LimitSource
Build Minutes Cost (per 10,000 minutes)$30 - $60/month metered$0 on fixed VPS — marginal cost is electricity and bandwidthRunner CPU availability.Woodpecker CI Docs
Parallel Job Concurrency1 - 5 by default; higher concurrency is a paid add-onUnlimited — bounded only by your agent resourcesAgent count and host CPU.Production Test
Build Job Startup (cold container)5s - 30s vendor scheduling + image pull1s - 5s with a warm local Docker image cacheLocal cache warm-up time.Production Test
Queueing During ReleaseJobs queue when the concurrency ceiling is hitNo queue with adequately sized agentsWorker pool size.Production Test

Frequently Asked Questions

Practical deployment, migration, and maintenance answers.

Is self-hosted CI slower than CircleCI?

Not necessarily. Dedicated runners with warm local image caches often build faster than shared vendor fleets, and you never wait in a shared concurrency queue. The ceiling is your hardware, not vendor quotas.

Can I keep using GitHub or Bitbucket for repos and PRs?

Yes. Woodpecker integrates with GitHub, Gitea, GitLab, Forgejo, and Bitbucket via OAuth/App tokens, triggering pipelines on pushes and pull requests through webhooks. Concourse subscribes to git resources the same way.

How do I run builds in parallel?

Each agent runs as many containers as the host CPU allows (configure with WOODPECKER_MAX_WORKFLOWS). Add more agents or bigger nodes to scale; there is no per-job concurrency fee.

How are secrets handled?

Woodpecker encrypts secrets in its database and injects them only into the pipelines that request them. Concourse has first-class credential management via the Concourse Credential Manager backed by Vault.

Do I need to maintain runners myself?

Yes — self-hosting means you own updates, patching, and backup. In exchange you get unmetered minutes at a fixed cost, no surprise bills, and full control of build environment and artifacts.

Starter Stack Pack — $29

Skip the setup: get the production-ready stack

Don't stitch together configs from five different READMEs. Get all 5 production-hardened Docker Compose stacks — Postgres, Redis, SSL auto-renewal, and backup scripts — ready to deploy in minutes.

n8nVisual workflow automation
📊UmamiPrivacy-first web analytics
🛡️Uptime KumaUptime monitoring & alerts
🔐VaultwardenBitwarden-compatible vault
☁️NextcloudDropbox/Drive replacement
Get the Stack Pack — $29 →

One-time purchase · Instant download · Production-ready

esc
navigate open