Runners

Bare metal runners


Bare metal runners

Bare-metal runners are physical machines used for CI/CD jobs that need direct hardware, predictable performance, special licensing, GPUs, embedded devices, mobile-device labs, industrial test benches, or network placement that ordinary cloud runners cannot provide. They can be valuable, but they need stronger operating discipline because local state, physical access, firmware, and hardware failure become part of the CI boundary.

This page covers user-facing design, security, monitoring, maintenance, and troubleshooting considerations for bare-metal runner fleets. For general controls, see Runner security hardening, Runner monitoring and support, and Troubleshooting. For platform routing, see GitHub Actions, GitLab runners, Gitea Actions, and Forgejo Actions.

Assistance can help design and operate the runner controls, evidence, maintenance, and incident workflow. The customer remains responsible for physical-site ownership, legal/compliance decisions, safety rules, asset ownership, and business risk unless contracted otherwise.

When bare metal is a good fit#

Use bare metal when the workload requires one or more of these:

  • attached hardware such as GPUs, USB devices, lab equipment, mobile devices, HSMs, license dongles, cameras, or embedded boards;
  • deterministic CPU, memory, disk, or network performance;
  • large local caches that are explicitly approved and governed;
  • network placement inside a private facility, lab, factory, or datacenter;
  • operating systems or drivers not available on managed cloud runners;
  • nested virtualization or kernel-level features that are unavailable in the chosen cloud profile.

Do not choose bare metal only because it feels cheaper. Persistent physical hosts usually increase patching, isolation, hardware replacement, and evidence work.

Ownership and location decisions#

Record these decisions before onboarding:

DecisionQuestions to answer
Site ownershipIs the machine in a customer office, customer datacenter, colocation space, lab, or Assistance-managed location?
Account ownershipWho owns CI registration, DNS, monitoring, remote access, out-of-band management, and support tooling?
Data residencyWhich country/region stores job logs, artifacts, support tickets, metrics, backups, and crash dumps?
Physical accessWho can touch the machine, replace disks, attach devices, reboot, or access console/KVM?
Remote accessIs access through customer VPN, bastion, SSO, just-in-time access, or a managed remote-support channel?
Safety and facility rulesAre there site induction, lab safety, export-control, production-line, or device-handling requirements?
Recovery modelIs there spare hardware, rebuild media, configuration backup, and a tested replacement path?

For EU-sensitive environments, Assistance can provide operational controls and evidence for customer review. Assistance does not make GDPR role determinations, certify the site, or provide legal advice unless explicitly contracted.

Bare-metal security controls#

Physical controls#

  • Keep runners in a controlled room, rack, lab, or cabinet appropriate to the data and workload sensitivity.
  • Track asset identifiers, serial numbers, location, owner, and support contact.
  • Restrict who can access power, console, removable media, attached devices, and network ports.
  • Record hands-on access and maintenance actions when the workload is sensitive or regulated.
  • Define how lost, stolen, replaced, or decommissioned disks are handled.

Host hardening#

  • Use a supported operating system, runner agent, firmware, drivers, and container/runtime stack.
  • Enable full-disk encryption where compatible with unattended boot and recovery requirements.
  • Disable unnecessary services, users, local admin rights, and inbound network paths.
  • Use SSO/MFA-backed administrative access where practical; avoid shared local administrator accounts.
  • Keep host firewall, endpoint protection, audit logging, and time synchronization enabled.
  • Pin or record driver and firmware versions for hardware-dependent jobs.

Runner isolation#

Bare-metal runners are often persistent. Treat that as a risk:

  • dedicate hosts or pools to one trust level: production deploy, non-production build, untrusted test, hardware lab, or regulated workload;
  • avoid running untrusted pull requests on hosts with production secrets, private-network access, or sensitive devices;
  • clean workspaces, temporary directories, package caches, Docker layers, and device state between jobs;
  • consider disposable VM, container, or snapshot layers on top of bare metal where hardware access still works;
  • quarantine and rebuild hosts after suspected compromise or unexplained state leakage.

Secrets and private access#

  • Store secrets in the CI platform or approved secret manager, not in local shell profiles or files.
  • Keep production secrets on restricted runner labels/tags and protected branches/environments.
  • Prefer short-lived credentials or identity federation where available.
  • Document which private services, lab networks, cloud APIs, databases, or deployment targets the host can reach.
  • Use allowlists, VLANs, firewall rules, VPNs, or egress gateways to prevent broad access from a compromised runner.

Monitoring bare-metal runners#

Bare-metal monitoring should include the normal runner signals plus physical and hardware signals.

SignalWhy it matters
Runner online/offline and queue timeConfirms CI jobs can route to the host
CPU, memory, disk, load, and IO waitDetects resource pressure and slow jobs
Disk health, SMART, RAID, filesystem errorsFinds failing storage before jobs corrupt or disappear
Temperature, fans, power, PSU, and thermal throttlingExplains intermittent hardware failures and performance drops
Network link, packet loss, DNS, VPN/private linkVerifies lab or datacenter connectivity
Driver, firmware, kernel, and agent versionsTracks drift for hardware-dependent jobs
Device presence and healthConfirms GPUs, USB devices, mobile devices, dongles, or lab equipment are attached and usable
Workspace cleanup and cache growthPrevents leakage and disk exhaustion between jobs
Physical or out-of-band management eventsSupports incident timelines and access reviews

Alerts should include host name or asset ID, runner labels/tags, location, affected device, business impact, and whether hands-on-site support is needed.

Maintenance windows#

Bare-metal maintenance often needs more coordination than cloud runners. A window should cover:

  • operating-system patches, runner-agent updates, firmware, BIOS/UEFI, drivers, GPU/toolkit updates, and container runtime changes;
  • physical work such as disk replacement, cable changes, device swaps, dust/thermal work, or rack moves;
  • expected impact to labels/tags and repositories;
  • validation jobs for hardware, network, secrets, and deployment access;
  • rollback plan for drivers, firmware, kernel, or image changes;
  • hands-on-site contact and remote-support contact;
  • evidence to retain: patch records, access logs, screenshots, job validation, and known issues.

For actively exploited vulnerabilities, leaked runner tokens, suspected compromise, or failing hardware, Assistance may recommend emergency maintenance and temporary removal from CI routing.

Backups and rebuilds#

A healthy bare-metal runner should be rebuildable. Back up or record:

  • host inventory, serial numbers, rack/location, attached devices, firmware and driver versions;
  • infrastructure-as-code, configuration management, bootstrap scripts, and runner registration process;
  • monitoring dashboards, alert rules, and runbooks;
  • license files or dongle records where legally and operationally appropriate;
  • evidence records and maintenance history.

Do not treat local workspaces, caches, or temporary build outputs as durable backups. Required artifacts should be uploaded to approved artifact storage with explicit retention and region choices.

Common bare-metal failure modes#

SymptomLikely causesFirst checks
Job cannot find GPU/device/dongleDriver update, device unplugged, USB reset, permission change, license service downDevice inventory, driver version, permissions, physical connection, last maintenance
Jobs slow after rebootThermal throttling, CPU governor, missing driver, cache cold, background updateTemperature, frequency, load, driver/toolkit status, recent patching
Runner offline after power eventHost did not boot, disk encryption prompt, network port down, agent not startedOut-of-band console, power status, boot logs, network link, agent service
Intermittent network failuresBad cable, switch issue, VPN/private link instability, DNS resolver issueLink errors, packet loss, DNS tests, switch/firewall changes
Disk fills repeatedlyPersistent caches, Docker layers, artifacts, logs, failed cleanupDisk usage by path, cleanup logs, retention settings, workspace ownership
Different results than cloud runnersHardware, OS, architecture, toolchain, persistent stateCompare versions, architecture labels, environment variables, cleanup state
Security concern on persistent hostUntrusted job, leaked secret, unexpected local state, unauthorized accessStop routing, preserve logs, rotate secrets, rebuild or quarantine

See Common runner errors for broader CI symptoms.

Escalation inputs for bare-metal incidents#

Include these details when asking for help:

  • CI platform, repository/project, workflow/pipeline/job URL, and runner labels/tags;
  • host asset ID, location, hardware profile, operating system, architecture, and attached devices;
  • first failure time, last known good run, and whether the issue survives reboot or rerun;
  • recent physical access, patching, firmware/driver changes, network changes, or device swaps;
  • screenshots or logs for runner agent, system errors, device status, and monitoring alerts;
  • whether production secrets, private networks, personal data, customer data, or regulated workloads may be involved;
  • hands-on-site contact, remote access method, and approval needed for reboot, replacement, or disk handling.

Decommissioning#

When a bare-metal runner leaves service:

  1. Remove it from CI runner groups, labels/tags, and registration records.
  2. Revoke runner tokens and any host-specific credentials.
  3. Remove network allowlists, firewall rules, VPN access, and monitoring targets that are no longer needed.
  4. Preserve required audit evidence and maintenance history.
  5. Wipe or destroy disks according to customer policy and data sensitivity.
  6. Update asset inventory, runbooks, and support contacts.