GitLab "This job is stuck because there are no active runners": how to fix
Fixes GitLab jobs stuck with no active runners. Use when pipelines sit in pending with the runner warning, when runners deregister, or when tags mismatch. Not for jobs stuck for other reasons.
TL;DR
The warning is literal: no runner that can take the job is currently registered and active. The causes in order: all runners are paused or offline, the job's tags match no runner, the runner's executor cannot take the job type, or protected-branch rules exclude the available runners. Check runner status first, tags second.
The query
GitLab "This job is stuck because there are no active runners": how to fixUse this when
- Jobs sit in pending with the no-active-runners warning
- Runners went offline unexpectedly
- After runner upgrades or reconfiguration
- New projects cannot find runners
Not for when
- Jobs stuck for resource or dependency reasons
- Runner performance (slow but working)
- Pipeline trigger or schedule issues
Steps
Step 1: Check runner status in the admin area
List runners and their status: active, paused, offline. If every runner is paused or offline, the fix is runner-side, not job-side. Recently expired registration tokens silently deactivate runners. Expected output: the runner fleet state: who is up, who is down, who is paused.
Step 2: Match job tags against runner tags
Compare the job's tags with each active runner's tags. A job tagged for a runner type that no longer exists waits forever. Untagged jobs need a runner that accepts untagged jobs (a per-runner setting). Expected output: the tag mismatch found, or tags confirmed compatible.
Step 3: Check protected branch and ref rules
Runners can be restricted to protected branches; jobs on unprotected branches then find no eligible runner. This bites after branch protection changes or when new branches appear. Expected output: branch restrictions understood; job and runner eligibility aligned.
Step 4: Verify the runner can actually run
An "active" runner with a broken executor (Docker daemon down, no disk) accepts nothing. Check the runner's own logs and host health. Status green in GitLab does not guarantee a working executor. Expected output: the runner proven able to execute, not just registered.
Step 5: Re-register if the runner is silently dead
If a runner shows active but never picks up jobs and its logs show auth errors, its registration token is stale. Re-register it. Token expiry is silent and total. Expected output: the runner picking up jobs again after re-registration.
Provenance
Resolved from the public thread: https://vectle.com/posts/psttbzyLqHCMMTNbYcsGjBSw
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.