Self-hosted vs cloud CI/CD
./break-even --analyse
Self-hosted CI/CD doesn't save money for everyone. The break-even point depends on build volume, team size, and how much operator time your platform team can absorb. This page works through the math at three usage levels.
Self-hosted infrastructure cost / 2026
| Setup | Hardware | Cloud (on-demand) | Cloud (spot) | Colocation |
|---|---|---|---|---|
| Single controller | 2 vCPU / 4 GB | ~$35 | ~$15 | ~$15 |
| Controller + 2 agents | 4+2+2 vCPU | ~$105 | ~$45 | ~$45 |
| HA mid-size | 3 controllers + 4 agents | ~$380 | ~$180 | ~$140 |
| Large enterprise | 5 ctrl + 12 agents | ~$1,300 | ~$600 | ~$450 |
# Cloud rates use AWS list pricing, US-East. Spot reductions assume 70% spot, 30% on-demand mix.
Open-source CI/CD tools at a glance
Jenkins
Strength: Most flexible, biggest plugin ecosystem
Watch out: Plugin maintenance, Groovy footguns
1 controller + N agents
GitLab CE (Community Edition)
Strength: Source control, CI/CD, container registry in one app
Watch out: Heavy stack: postgres, redis, sidekiq, gitaly
Beefier server (8+ GB RAM)
Drone CI
Strength: Docker-native, clean YAML, low operator burden
Watch out: Smaller plugin ecosystem than Jenkins
1 small VM handles small teams
Woodpecker CI
Strength: Drone fork, fully open source, growing community
Watch out: Less mature than Drone, smaller community
Same as Drone
Gitea Actions
Strength: GitHub Actions compatibility on self-hosted Gitea
Watch out: Newer, fewer published actions tested
1 small VM + Gitea instance
Concourse CI
Strength: Pipelines as first-class objects, declarative
Watch out: Steep learning curve, opinionated model
Web + worker servers
Break-even analysis / when to switch
# scenario A: light volume
monthly_minutes = 10,000 / hosted_cost = ~$150 / self_hosted_TCO = ~$430
verdict = stay hosted
# scenario B: medium volume
monthly_minutes = 50,000 / hosted_cost = ~$650 / self_hosted_TCO = ~$700
verdict = roughly even, depends on operator capacity
# scenario C: heavy volume
monthly_minutes = 200,000 / hosted_cost = ~$2,400 / self_hosted_TCO = ~$1,400
verdict = self-hosted wins by ~$1,000/month
self_hosted_TCO above includes infrastructure plus a typical 6 hours/month of operator time at $100/hour loaded. At larger scales, fixed operator overhead amortises across more build minutes, so the gap widens.
Related
Frequently Asked Questions
# click any question to expand
When is self-hosted CI/CD cheaper than cloud SaaS?>
Two break-even points matter. (1) Build minutes: above 50,000 monthly Linux build minutes, self-hosted infrastructure typically beats per-minute SaaS pricing. (2) Operator hours: self-hosted needs 4-20 hours per month of admin time. If you can absorb that into existing platform-team capacity, infrastructure cost wins. If you'd hire a person specifically to run it, hosted is almost always cheaper.
What's the cheapest self-hosted CI/CD stack?>
Drone CI on a single t3.medium ($30/month) handles small-team workloads with minimal overhead. Drone's Docker-native model means little infrastructure beyond the controller. For larger teams, a Jenkins controller plus 2-4 ephemeral agents on Spot instances delivers the best dollar-per-build-minute ratio at the cost of higher operator effort.
Do I need Kubernetes for self-hosted CI/CD?>
No. Plenty of teams run Jenkins or GitLab Runner on plain VMs and never touch Kubernetes. Kubernetes is helpful when you want autoscaling agents, want to share a cluster with other workloads, or already operate Kubernetes for your apps. For a CI-only setup of fewer than 20 agents, plain VMs are simpler and cheaper.
What about secrets and SSO with self-hosted?>
Self-hosted CI/CD can integrate with HashiCorp Vault, AWS Secrets Manager, or external SSO via SAML / OIDC, but the integration work is yours. Hosted platforms usually offer secrets and SSO out of the box. Budget time to do this properly: a self-hosted CI/CD with weak secrets management is a security accident waiting to happen.
Is self-hosted GitLab Runner free?>
Yes. GitLab Runner is open source and registers against any GitLab plan including the free tier without consuming CI minutes. Many teams use a hybrid model: GitLab.com hosts the controller and project, while self-hosted runners on AWS or on-prem do the actual builds. This avoids per-minute fees while keeping GitLab as the orchestrator.
How does macOS work for self-hosted CI/CD?>
You provide the Macs. Most teams run a small fleet of Mac minis (M2 generation) either rack-mounted in their office or rented from MacStadium / Mac Cloud at around $80-150/month per Mac. Pair them with a self-hosted GitLab Runner, Buildkite agent, or GitHub Actions self-hosted runner. Owning Macs pays back fast for any team shipping iOS or macOS apps.