Products

Pricing

FAQs

Blog

// self-managed gitlab

Runners for Self-Hosted GitLab

Your instance came with CI and no runners. Get dedicated build compute registered against your own GitLab in about four minutes, without installing or patching a single machine.

48-hour free trial · works with GitLab CE and EE

// the missing piece

Self-managed GitLab ships with no runners

You installed GitLab, the CI/CD section is right there in the sidebar, and your first pipeline sat pending until it timed out. Nothing is broken. A self-managed instance gives you the whole CI/CD system and none of the machines that execute it.

GitLab's shared runners belong to GitLab.com. They are a hosted service, not part of the software you installed, and they do not come across when you run your own instance. That is why the runners page on a fresh install is empty, and why every pipeline you write stays queued until you supply compute yourself.

So somewhere between installing GitLab and shipping anything through it, there is a job nobody told you about: find a machine, install GitLab Runner on it, register it against your instance, choose an executor, and then keep that machine alive and patched for as long as you use CI. RocketRunner does that part for you, against your instance, while everything else stays where you put it.

// why it's empty

Two decisions that arrived as one

You run your own GitLab for a reason. A client contract, an auditor's question about where source lives, a policy about company code on someone else's SaaS. Whatever it was, it was almost certainly not a wish to maintain build machines. That part came attached.

It is worth separating them, because they are genuinely different questions. Where the repository lives is what compliance cares about: source, full history, issues, merge requests, access control, backups. That is the system of record, and it is what a data residency clause is written against.

Where builds run is infrastructure. A runner clones a repo, executes a job, reports back, and holds nothing permanently. Most teams answer both questions at once, keep both, and then spend their Tuesdays on the second one. Keeping the instance in-house and renting the compute is a supported combination, not a compromise.

// your options

Install it yourself, build a fleet, or rent one

Every self-hosting team solves this one of three ways. All three work. They differ in how much of your attention they keep asking for after the first pipeline goes green.

Install it yourself

A box and a package manager

Setup

Install, register, configure executor

Time to first green pipeline

An afternoon, if nothing surprises you

Who patches the machine

You, forever

Isolation between clients

One box, shared unless you build more

When a contract ends

Remember to decommission it

Real cost

Server, plus your Tuesdays

Build a fleet

Kubernetes, autoscaling, IaC

Setup

Terraform or scripts you write

Time to first green pipeline

Days, then it's repeatable

Who patches the machine

You, forever

Isolation between clients

Whatever you engineered

When a contract ends

Destroy the stack, hope it's clean

Real cost

Server, plus the platform you built

Rent one

RocketRunner

Setup

Connect instance, pick a size

Time to first green pipeline

About 3 to 4 minutes

Who patches the machine

We do

Isolation between clients

One VM per runner, by default

When a contract ends

Delete the runner, billing stops

Real cost

Per-minute, capped monthly

Installing one runner on a spare server is genuinely the cheapest option on day one, and for a single project that never changes it may stay that way. The cost shows up later, in upgrades you postpone, disks that fill with old build caches, and the one machine everybody has forgotten how to rebuild.

Building a fleet is the right answer at real scale, and if you already run Kubernetes you probably should. It is a platform project, though, with a platform project's maintenance. Renting sits in between: the isolation of your own machine, none of the lifecycle.

// how it works

Connected to your instance, not ours

The connection runs the same way it does for GitLab.com, except the authorization happens on your server. You stay the identity provider throughout.

01

Point us at your instance

Enter your GitLab URL. It needs to be reachable on public https, which covers most company and agency instances.

02

Authorize on your own GitLab

An admin creates an OAuth application on your instance once, or you use a personal access token. The credentials stay on your side.

03

We provision and register

A dedicated VM comes online, installs the runner, and registers it against your instance. Your next pipeline picks it up.

The OAuth application lives on your GitLab. You created it, you can see it in your admin area, and you can revoke it there without asking us or waiting for a support ticket. If you would rather not create an application at all, a personal access token works too.

From there the runner behaves like any other runner registered against your instance. It shows up on your runners page, respects your tags, and runs the jobs you point at it. Delete it from RocketRunner and the VM is destroyed and billing stops the same minute.

// when this doesn't fit

What your instance needs, and when to keep self-hosting

Your GitLab has to be reachable from the runner over the public internet, on https, with a valid certificate. That is not a preference, it is how the connection works: the runner polls your instance for jobs and we call your instance's API to register it. Instance URLs that resolve to private or internal addresses are rejected.

That covers most self-managed instances at companies and agencies, which sit on a real domain behind a real certificate. It does not cover an air-gapped instance, a VPN-only instance, or one bound to a private network. If that is you, keep running runners inside your perimeter. No hosted runner service can help, and any that claims otherwise is worth a second look.

The other honest point: a runner clones your source in order to build it. That is true of every runner ever created, including the one you would install yourself. What differs is the machine. A shared runner is multi-tenant, on hardware you did not choose, after work you cannot see. A dedicated runner is a single-tenant VM in a region you picked, used by nobody else, and destroyed on deletion. That is a posture you can describe to a client security review.

// the case this fits best

One runner per client, destroyed when the contract ends

Agencies and consultancies hit this hardest, because the problem repeats per client. Run work for eight clients, several on their own GitLab instances, and self-assembly means eight runner fleets, eight sets of credentials, eight machines to patch, and an uncomfortable question every time an engagement ends about what is still sitting on that box.

One isolated runner per client, billed separately and destroyed at the end of the contract, is a much cleaner story for you and for your client's security review. That kind of isolation is difficult to retrofit and easy to get subtly wrong, which is exactly the sort of thing worth not building yourself.

Compare dedicated GitLab runners and pricing

// pricing

Billed by the minute, capped monthly

Nothing here is tied to your GitLab licence or your seat count, because your instance stays entirely yours. You are paying for a machine and the work of keeping it alive.

CI/CD Runner

// ci-cd

from

$0.018

/hr

per minute, capped monthly by size

Persistent Docker layer caches

Cheaper than GitLab CI minutes

EU & US regions

// server sizes

Small

4 GB · 2 vCPU · 40 GB

$0.018/hr

≤ $10.59/mo

Medium

8 GB · 4 vCPU · 160 GB

$0.049/hr

≤ $28.89/mo

Large

16 GB · 8 vCPU · 240 GB

$0.076/hr

≤ $45.12/mo

AI Agent Runner

// agent

$0.033

/hr

capped at ~$21/mo

Bring your own Claude subscription or API key

Code stays on your private server

Delete anytime, billing stops

// no per-seat tax

Point your own Claude subscription at every project on the runner. No AI seats to buy.

// faq

Frequently asked questions

No. A self-managed GitLab instance, Community or Enterprise Edition, installs the CI/CD system but no runners at all. GitLab's shared runner fleet belongs to GitLab.com and is not part of the package you install. Until you register at least one runner, every pipeline you define sits pending and nothing executes it.

Private CI and an AI teammate, in 3 to 4 minutes

One click to set up on your own private runner. Flat, capped pricing. 48-hour free trial.