Skip to content
Fran Gonzalez
← Back to blog
·Clanker·8 min read

Seven ways to host a GitLab CI runner in 2026, priced and compared

A comparison of home hardware, GitLab.com, AWS, ARM64 cloud, local AMD hardware, and Hetzner for a monorepo running 2,000 CI jobs a month.

Some matmuls wrote this slop, sorry. My goal with this content is to document some work I (a real human bean) do while poking the Clanker, and try to learn something along the way.

Seven ways to host a GitLab CI runner in 2026, priced and compared

This comparison covers seven GitLab CI runner hosting options for a monorepo. The baseline is approximately 2,000 jobs per month, 127 hours of job runtime, a Docker executor with a host socket, an 8 GB memory limit per job, and concurrent=2. The prices and specifications below are the values collected for this comparison.

Note

Prices and availability are a July 2026 snapshot. AWS prices depend on region and usage, and provider listings can change. The AWS monthly estimates exclude data transfer, EBS, and scheduler charges. Benchmark figures are directional comparisons rather than workload measurements.

The workload

From a separate analysis using glab api, our monorepo runs ~2,000 CI jobs per month totaling ~127 hours of job runtime. The top consumers:

Job templateRuns/monthRecorded minutes
mobile-app:quality1261,259
api-contracts:drift123945
e2e-tests:quality92687
mobile-app:fast103610
renovate:run20516

The setup

The current runner is a Lenovo ThinkCentre with an Intel i5-7500T (4c/4t @ 2.7 GHz, PassMark ~6,000), 27 GB RAM, and 98 GB of disk. It sits in a closet. Docker caps each job container at 8 GB RAM and runs at most 2 jobs concurrently. Host-mounted volumes provide persistent Maven/pnpm caches and Docker layer reuse. Monthly electricity: measured at ~9 kWh, roughly €1.70.

Option 1: Keep the home runner

Closet ThinkCentre
Monthly cost~€1.70 electricity
CPU4c/4t i5-7500T, ~6,000 PassMark
RAM27 GB
Concurrent jobs2
CachePersistent, host disk
AvailabilityWhen your home internet works
OperationsSelf-managed

Assessment: The direct monthly cost is electricity. Operation, maintenance, and incident response remain self-managed. The runner supports the current workload but depends on the home internet connection.

Option 2: GitLab.com SaaS runners

Runner sizeCost factorCompute min/monthPlan fit
small (2 vCPU / 8 GB)17,620Free +$72 / Premium included
medium (4 vCPU / 16 GB)215,240Premium +$52 / Ultimate included
large (8 vCPU / 32 GB)322,860Ultimate required

Our pipeline uses a privileged Docker socket, pull_policy: if-not-present, and host-mounted caches. These settings cannot transfer directly to SaaS runners. A move would require Docker-in-Docker or Kaniko, a different cache arrangement, and additional GitLab cache I/O.

Option 3: AWS EC2

InstancevCPURAMOn-demand/moCI-suitable?
t3a.xlarge416 GiB$110Configured for concurrent=1; burst credits can deplete under builds.
t3a.2xlarge832 GiB$21932 GiB RAM; Unlimited mode may add charges.
r7i.xlarge432 GiB$19332 GiB RAM; non-burstable.

With AWS Instance Scheduler (stopped nights and weekends), an r7i.xlarge + 150 GB EBS drops to ~$81/month. Docker layer cache on EBS is slower than local NVMe.

Option 4: ARM64 cloud (Oracle / Hetzner / netcup)

ProvidervCPURAMStorageMonthlyCatch
Oracle Free Tier4 OCPU24 GB200 GB€0Free forever, but cannot rely on a free tier for business CI
netcup VPS 3000 ARM1224 GB768 GB€19Ampere Altra Max. 28% CPU steal. Sold out.
Hetzner CAX318 vCPU16 GB160 GB€22Shared vCPU. Two 8 GB jobs leave no RAM for the host.

ARM64 cloud VPS prices are lower than comparable x86 options in this table, but availability varied between providers. Ampere Computing is the merchant ARM server chip vendor represented in these options. Its products are primarily used by hyperscalers, while smaller providers have fewer ARM capacity options. netcup’s ARM line was sold out when I checked it. ServeTheHome reported replacing its planned ARM servers with AMD EPYC in 2025.

Assessment: ARM64 cloud reduces the hourly price in some configurations. Provider availability and workload compatibility remain constraints.

Option 5: Local ARM64 hardware

DeviceCPURAMPriceDocker?Observed fit
Raspberry Pi 54× A768 GB~€100Below current throughput
Orange Pi 5 Max8-core RK358816 GB~€170Requires workload testing
MINISFORUM MS-R112-core CIX P164 GB~€560Supports this workload
Geekom QS1 ProSnapdragon X Elite64 GB~€800⚠️Linux support under evaluation

The MINISFORUM MS-R1 is one local ARM64 option in this comparison. It has 64 GB RAM and similar measured throughput to the i5-7500T. Its listed price was approximately €560, so it adds memory capacity without increasing the measured throughput over the current runner. It can also build ARM64-native production images without emulation.

Option 6: A new local AMD x86 box

DeviceCPURAMPricePassMark
MINISFORUM UM790 ProRyzen 9 7940HS32 GB~€730~28,000
Used Ryzen office PCRyzen 5 5600G32 GB~€350~19,000

The listed MINISFORUM UM790 Pro benchmark is 4.5× the i5-7500T result. That PassMark comparison is directional; it does not predict this workload’s build time. The purchase price is approximately equivalent to 11 months of the listed Hetzner monthly cost.

Option 7: Hetzner dedicated server - Ryzen 5 3600, 64 GB

Closet i5Hetzner Ryzen 5 3600
Monthly cost~€1.70€65.70
CPU4c/4t, ~6,000 PassMark6c/12t, ~17,800 PassMark
RAM27 GB64 GB
Storage98 GB2×512 GB NVMe + 16 TB HDD
Concurrent jobs26–10
CacheHost diskHost NVMe
Same config.toml?N/AYes
Same .gitlab-ci.yml?N/AYes
AvailabilityHome internetDatacenter, 99.9% SLA
OperationsSelf-managedDatacenter hosting

The Hetzner option uses the same CPU architecture, Docker executor, config format, and pipeline structure. The runner registration would use a different IP address. The existing persistent caches, pull_policy: if-not-present, and Docker socket mount can use the same configuration. The listed CPU benchmark is approximately 3× the closet runner’s result.

All seven options, side by side

OptionMonthlyCPU vs i5RAMCacheSetup effort
Closet i5~€227 GB✅ Host diskDone
GitLab SaaS (small, Premium)$87+~0.5×8 GB/job⚠️ S3Pipeline rewrite
AWS r7i.xlarge + Scheduler$81~1×32 GB⚠️ EBS1 hour
Oracle Free ARM64€0~0.8×24 GB⚠️ Cloud1 hour
Hetzner CAX31 ARM64€22~0.7×16 GB⚠️ Cloud1 hour
MINISFORUM UM790 Pro€0/mo (€730 upfront)4.5×32 GB✅ NVMe1 hour
Hetzner Ryzen 5 3600€65.7064 GB✅ NVMe1 hour

The Hetzner box is not the lowest-cost option. The Oracle Free Tier is listed at €0, and a used office PC is listed at €350 once. The Hetzner option provides 64 GB RAM, more CPU capacity than the closet runner, a datacenter location, and a compatible Docker executor configuration.

Decision

The comparison favors the Hetzner option because it preserves the current CPU architecture, Docker executor, cache mounts, and pipeline configuration while increasing CPU and memory capacity.

References

This post was written with AI assistance.