Bitbucket "No runner matched the labels" - Self-Hosted Runners
A step asked for a self-hosted runner with a specific set of labels, but no online runner advertises all of them. The job waits, then fails because nothing can pick it up.
What this error means
A step that uses runs-on stays queued and then errors that no runner matched its labels. It never starts - there is no runner whose label set is a superset of what the step requested.
No runner matched the labels: self.hosted, linux, gpu
Ensure a runner with all these labels is online.Common causes
Label typo or mismatch
A step runs-on label does not exactly match the labels configured on any runner. Labels are matched as an exact set - a single mismatch means no runner qualifies.
No runner with the full label set is online
A runner must advertise every label the step requests. If the only runner with gpu is offline, the step has nothing to match.
How to fix it
Align step labels with a runner
Make runs-on request exactly the labels an online runner provides. self.hosted plus the system labels are implicit on every runner.
- step:
runs-on:
- self.hosted
- linux
script: [ ./build.sh ]Verify runners and their labels
- Open Repository/Workspace settings → Runners and confirm a runner is online.
- Check its labels include every label the step requests.
- Start or relabel a runner so its set is a superset of the step’s
runs-on.
How to prevent it
- Keep a documented, consistent label scheme across runners and steps.
- Monitor runner online status so capacity is available when builds run.
- Avoid one-off labels that only a single, sometimes-offline runner provides.