GitLab CI/CD 377 is built into GitLab 377 (GitHub Versus GitLab): one .gitlab-ci.yml per repository, jobs run by GitLab Runner on GitLab's machines or yours, and the same YAML on GitLab.com and a self-managed server. BookNest's test job would read:
test:
image: node:24-alpine
services:
- name: postgres:18
alias: db
variables:
POSTGRES_USER: booknest
POSTGRES_PASSWORD: booknest
POSTGRES_DB: booknest
PGHOST: db
script:
- npm ci
- npm testCircleCI 10,326 is a hosted service with a .circleci/config.yml, reusable packages of configuration called orbs, and self-hosted runners for private networks. It bills in credits: the Free plan includes 30,000 a month, the Performance plan starts at $15 a month with $15 per extra 25,000 credits, and a Linux Medium machine uses 10 credits a minute, so about $0.006 a minute.
| Jenkins | GitLab CI/CD | CircleCI | |
|---|---|---|---|
| Pipeline file | Jenkinsfile (Groovy) | .gitlab-ci.yml | .circleci/config.yml |
| License | MIT | Core MIT, paid tiers proprietary | Proprietary |
| Who runs it | You | GitLab, or you | CircleCI; runners optional |
| Price | Free; you pay for machines | Free tier; Premium $29 a user/month | Free tier; from $15/month |
| Extending it | 2,000+ plugins, Groovy | Components, templates | Orbs |
Choose GitLab when the code already lives there, CircleCI when you want hosted speed without GitHub 29 , and Jenkins when builds must stay on your own network, need unusual hardware, or depend on plugins the others lack. The cost of Jenkins is people: someone patches, backs up and upgrades the controller (Securing Jenkins-Backups and Upgrades).