Every team that ships more than once a week ends up running a build farm whether it meant to or not. The fifteen-line YAML file grows a test matrix, a registry push, a staging deploy and a nightly integration run, and the queue time and the invoice grow with it.
On December 15, 2025, GitHub announced a $0.002-per-minute platform charge on every Actions workflow in a private repository, including jobs running on runners you own and already pay a cloud provider for. The backlash was loud enough that GitHub postponed the self-hosted half within days, while the hosted price cuts went ahead on January 1, 2026 at up to 39 percent off. That is the shape of CI/CD in 2026: compute keeps getting cheaper, the control plane is where vendors look for margin, and platforms differ less in features than in which meter they run.
What Teams Actually Run
JetBrains' State of Developer Ecosystem 2025 puts GitHub Actions at 33 percent adoption inside organizations, Jenkins at 28 percent and GitLab CI at 19 percent, and 18 percent use no CI/CD tool at all. In the companion State of CI/CD survey of 805 practitioners, 32 percent of organizations run two CI tools at once, so "which one" is often really "which one for this repo."
Notice Jenkins at 28 percent. A Java automation server from 2011, with 2,102 plugins in its update center today, is still the second most-used CI tool at work. That is not nostalgia. It is what happens when a tool has no per-minute meter and no seat count.
What the Same Month Costs on Each Platform
Feature lists do not separate these platforms much. Billing models do. This script prices the same workload, 10 developers and 12,000 Linux build minutes a month, against each vendor's published rates:
js// ci-cost.mjs - one month of the same Linux workload, four hosted CI platforms. // Rates read off each vendor's pricing page, September 2026. // Assumes: GitHub Team seats, CircleCI Docker medium (10 credits/min, so // 30,000 included credits = 3,000 min), Buildkite 2-vCPU agents (4,000 // included vCPU-min = 2,000 wall-clock min). CircleCI's "from $15/month" is its // minimum credit purchase, not a platform fee: extra users cost 25,000 credits ($15). const devs = 10; // active developers const minutes = 12000; // Linux build minutes per month const plans = [ // name, seatBase, seatsIncl, seatRate, freeMin, $/min ['GitHub Actions (Team)', 0, 0, 4, 3000, 0.006], ['GitLab CI (Premium)', 0, 0, 29, 10000, 0.010], ['CircleCI (Performance)', 0, 5, 15, 3000, 0.006], ['Buildkite (Pro, hosted)', 0, 0, 30, 2000, 0.008], ]; for (const [name, seatBase, incl, seatRate, freeMin, rate] of plans) { const seats = seatBase + Math.max(0, devs - incl) * seatRate; const compute = Math.max(0, minutes - freeMin) * rate; const total = seats + compute; console.log( `${name.padEnd(26)} seats $${seats.toFixed(0).padStart(4)}` + ` compute $${compute.toFixed(0).padStart(4)} total $${total.toFixed(0)}/mo` ); }
Running it with Node 22 or later:
Bash$ node ci-cost.mjs GitHub Actions (Team) seats $ 40 compute $ 54 total $94/mo GitLab CI (Premium) seats $ 290 compute $ 20 total $310/mo CircleCI (Performance) seats $ 75 compute $ 54 total $129/mo Buildkite (Pro, hosted) seats $ 300 compute $ 80 total $380/mo
Compute is small in every row. Seats are the bill. GitLab Premium and Buildkite Pro bundle far more than CI, but this shows where to look when an invoice surprises you.
GitHub Actions
GitHub Actions is the default because it is already there. GitHub gives Free accounts 2,000 minutes a month on private repos, Pro and Team 3,000 and Enterprise Cloud 50,000. Public repositories stay free on standard runners.

After the January 1, 2026 repricing, a 2-core Linux x64 runner is $0.006 per minute, arm64 is $0.005, Windows is $0.010 and macOS is $0.062. Artifact storage is $0.25 per GB-month; the Actions cache is $0.07 per GB-month beyond a free 10 GB per repository, and it is the line most teams forget to budget for. The marketplace is the real moat and also the supply chain you inherit, so pin actions by commit SHA, not by tag. The postponed platform fee is the open question: GitHub said it was re-evaluating, not canceling, so price that risk in if you run a large self-hosted fleet.
GitLab CI/CD
GitLab sells one platform rather than a CI product, and its pricing reflects that. Free gives 400 compute minutes a month and 5 users per top-level group. Premium is $29 per user per month billed annually with 10,000 minutes and 500 GiB storage; Ultimate moved to custom pricing this year and carries 50,000. Extra compute is a one-time $10 per 1,000 minutes.

The clause that matters most is buried in GitLab's own FAQ: "Execution on your own runners will not use your compute minutes and is unlimited." Attach a gitlab-runner to a machine you control and the meter stops entirely, on every tier including Free. No other hosted vendor here offers an escape hatch that clean, and if you already pay for seats it makes the CI portion effectively free.
CircleCI
CircleCI bills in credits, not minutes, and the conversion is the whole story. A Docker small runner burns 5 credits per minute, medium 10, large 20. Linux VM rates depend on the generation you pick: the default x86 VM medium is 10 credits a minute and x-large 100, while Gen 3 medium is 7 and x-large 28. A macOS M4 Pro medium is 200 credits a minute and large is 400, making iOS builds roughly forty times the cost of a Linux job.

Free gives 30,000 credits a month (6,000 Docker small minutes), 5 users and 30x concurrency. Performance starts at $15, which buys credits rather than a seat: extra users and every extra 25,000 credits cost $15, and whole blocks round $129 to $135. Free credits do not roll over. Parallelism and test splitting are still the best here for large suites, but budget in credits or the first macOS build will be a shock.
Buildkite
Buildkite is the hybrid: it runs the control plane, scheduling, logs, secrets and UI, while you run the agents on your own hardware. At scale you want builds next to your own caches and artifacts, not in someone else's region.

Free covers 5 users, 10 concurrent jobs and 2,000 Linux vCPU-minutes a month. Pro is $30 per active user per month up to 50 users, with 10 agents included, $3.50 per agent after that, and 4,000 Linux vCPU-minutes. Optional hosted agents run $0.004 per vCPU-minute on Linux and $0.02 on Mac, so a 2-vCPU Linux agent is $0.008 per wall-clock minute. Self-hosted agents carry no per-minute charge. The seat price is the highest here and only pays off if you intend to run your own compute.
Jenkins
Jenkins is the open-source answer that never went away. MIT-licensed, 26.5k GitHub stars, current LTS 2.568.2 released August 5, 2026, with 2,102 plugins in the update center.

What it gives you is no meter and no seat count. What it costs you is a controller to patch, a JVM to tune and a plugin dependency graph that becomes its own maintenance job past the 200-plugin mark. Java 21 is required on the 2.555 line and later. Choose it for build steps that resist containerization, hardware that must stay on-premises, or a decade of Groovy nobody will port. Do not choose it because it is free; the sysadmin time is the price.
Semaphore Community Edition
Semaphore open-sourced its platform under Apache 2.0, which makes it the only entry here that offers the same engine as a commercial cloud and as a self-hosted install. Community Edition runs unlimited users and concurrency on your own Linux box or Kubernetes cluster, with artifacts, test dashboards and flaky test detection included.

Two caveats. It is open core: the ee directory sits under a separate Enterprise Edition license, and SAML/SCIM, RBAC, audit logs and pre-flight checks live behind it. And while the main branch sees commits daily, the last tagged release is v1.5.0 from October 10, 2025, so pin a version before upgrading a production install. Semaphore Cloud is the managed path: $15 in free credits a month, then $0.0075 per minute for a 2-vCPU x64 machine or $0.003 for ARM, with no seat fee.
Woodpecker CI
Woodpecker is what happens when a community keeps a tool it liked. It forked from Drone in 2021 after a license change restricted self-hosted use, and is Apache 2.0 with 7.8k stars and v3.18.0 shipped on August 24, 2026.

Every pipeline step is a Docker container, the whole thing is a Go server plus one or more agents, and it integrates with GitHub, GitLab, Gitea, Forgejo and Bitbucket. It is the smallest useful CI you can run, and a small team can have it working in an afternoon. There is no hosted option, no test analytics and a plugin ecosystem measured in dozens.
Argo CD
Argo CD is not a CI tool and should not be compared to one. It is a CNCF graduated GitOps reconciler that watches a Git repository and keeps a Kubernetes cluster matching it, replacing the deploy stage of your pipeline rather than the build stage.

It earns a place here because the CNCF's July 2025 end user survey found it running in nearly 60 percent of Kubernetes clusters used for application delivery, with 97 percent of respondents running it in production and an NPS of 79. Apache 2.0, 24k stars, v3.5.2 as of August 27, 2026. The modern Kubernetes stack is any CI tool for build and test, then Argo CD or Flux for delivery.
Side by Side
| Tool | Model | Entry price | Self-host | License |
|---|---|---|---|---|
| GitHub Actions | Per seat + per minute | 2,000 free min, then $0.006/min | Runners, free for now | Proprietary |
| GitLab CI/CD | Per seat + per minute | Free 400 min; Premium $29/user | Runners, unmetered | Open core |
| CircleCI | Per seat + credits | Free 30,000 credits; from $15/mo | Runners on paid plans | Proprietary |
| Buildkite | Per seat, agents yours | Free 5 users; Pro $30/user | Yes, no per-minute fee | Proprietary |
| Jenkins | Self-hosted only | $0 license | Yes | MIT |
| Semaphore CE | Self-hosted or cloud | $0 license; cloud $0.0075/min | Yes | Apache 2.0 (open core) |
| Woodpecker | Self-hosted only | $0 license | Yes | Apache 2.0 |
| Argo CD | CD only, self-hosted | $0 license | Yes | Apache 2.0 |
How to Choose Without Migrating Twice
- Measure before you shop. Run the script above on last month's real build minutes and contributor count. If seats dominate, a cheaper per-minute rate will not save you.
- Check the macOS multiplier if you ship an app. CircleCI's M4 Pro at 200 credits a minute and GitHub's $0.062 a minute are the priciest lines here.
- Ask what your own runners cost. GitLab says unmetered and unlimited, Buildkite charges nothing per minute, GitHub charges nothing but may revisit that.
- Trial the free tier on your slowest real job, not a hello-world, and time the cold cache case.
- Keep the pipeline portable. Container steps and shell scripts move between platforms; orbs, marketplace actions and Groovy do not.
Which One Should You Actually Use?
Already on GitHub: GitHub Actions, at $94 a month in the ten-developer example, is the cheapest and the least effort.
Already paying for GitLab seats: attach your own runners and CI compute drops to zero on any tier, Free included.
Builds that belong next to your own caches and hardware: Buildkite, if the $30 seat buys enough control plane to justify it.
No budget, or hardware that cannot leave the building: Woodpecker for a small team, Semaphore CE for a bigger one, Jenkins when legacy integrations rule out both. Add Argo CD for delivery on Kubernetes.
Conclusion
The movement in 2026 is not a new vendor. Pricing pressure shifted from compute to control plane while self-hosting got easier: Semaphore's engine is Apache 2.0 now, Woodpecker is a single Go binary, and GitLab runs unmetered builds on hardware you already own. Before you renew, put last month's real minute count through the script above, then ask whether your vendor bills you for runners you already pay for. That question separates these platforms more cleanly than any feature comparison.
Related DevToolLab Tools
- Dockerfile Linter - catch the layer ordering and missing pin problems that make an image build slow, before a CI job burns minutes proving it.
- JWT Decoder - inspect the OIDC token your pipeline trades for cloud credentials and confirm the
subandaudclaims match your trust policy. - SemVer Calculator - work out the next version your release job should tag, and check a range before a dependency resolves differently.
- README Badge Generator - build the shields.io build-status badge for whichever platform you land on.
Related Guides
- GitHub Actions Best Practices - reusable workflows, OIDC auth and SHA pinning once you have picked a platform
- Best Infrastructure as Code Tools - what your deploy stage actually runs
- Best Secrets Management Tools - where pipeline credentials belong instead of CI variables
- Best Static Code Analysis Tools - checks worth adding to the pipeline you just chose
