ENTSCHEIDUNGSMATRIX · TEAM-CI 2026

2026 Geteilter Remote-Mac-Build-Pool: GitHub Actions Self-Hosted Runner, Label-Routing, parallele Warteschlangen & Konflikt-Checkliste

Lesezeit: ca. 8 Min.
Self-Hosted Runner, Label-Routing, Warteschlange, Remote Mac, Team-CI
Kleine Teams mit gemeinsamem Remote Mac für Team-CI brauchen neben dem Self-Hosted Runner vor allem Label-Routing, Regeln für parallele Warteschlangen und klare Konfliktregeln. Hier: Matrix und Schwellen – Queue-Trennung, Label-Namen, Concurrency und Platten-Bereinigung.

Typische Engpässe (kurz)

  1. Label-Chaos: Workflows treffen den falschen Runner; Jobs bleiben scheinbar „queued“, obwohl Hardware frei ist.
  2. Unbegrenzte Parallelität: Zwei schwere Xcode-Builds teilen sich SSD und Simulator – beide scheitern intermittierend.
  3. Signing & Platte: Gemeinsame Keychains oder aggressives Aufräumen zerstört reproduzierbare Releases.

① Ziele des gemeinsamen Pools und Risiken

Ein geteilter Remote-Mac-Pool soll PR-Feedback, reproduzierbare Releases und fairen Zugang liefern. Risiken: Ressourcen-Konkurrenz, Signing-Konflikte, undurchsichtige Queues – Jobs wirken „hängend“, obwohl Labels, Kapazität oder Sperren die Ursache sind.

Der Self-Hosted Runner ist Scheduling-Endpunkt, keine Mandantenisolation. Regeln verhindern Überlast oder verhungerte Releases. Verantwortliche für Xcode-Pins, Runner-Upgrades und Drain-Zeiten festlegen, wenn VNC und CI einen Host teilen.

Checkliste: Wann Warteschlangen (Pools) trennen

  • Trennen, wenn Produktlinien unterschiedliche Xcode- oder macOS-Baselines brauchen – separate Runner und Label-Routing verhindern falsche Toolchains.
  • Trennen, wenn interaktive VNC-Sitzungen regelmäßig mit schwerer CI kollidieren – dedizierter Knoten oder Zeitfenster reduzieren Latenz für Mensch und Pipeline.
  • Trennen, wenn Release-Archive garantierte Kapazität brauchen – release-Workflows auf Labels routen, die keinen PR-Lärm annehmen.
  • Zusammenführen, solange ein Xcode-Pin, geringe Parallelität und wenige Konflikte messbar sind – Struktur erst nach wiederholten SLA-Verletzungen verschärfen.

② Label-Routing-Vergleichsmatrix

Label-Routing wählt den Self-Hosted Runner. Schwache Namen erzeugen Fehlrouten oder Leerlauf – Labels stabil und maschinenlesbar halten.

Routing-Muster Ideal für Kompromisse
Breiter Pool (macos, arm64) Homogene Flotte, ein Xcode-Pin, hohe Auslastung Jeder Workflow kann jeden Runner belegen; Reservierung für Releases schwieriger
Toolchain-fokussiert (xcode-16-2, swift-6) Repos mit festem Compiler- oder SDK-Verhalten Mehr Runner-Pflege; Labels müssen Upgrade-Kalender folgen
SLA-Stufen (ci-pr, ci-release) Getrennte Pools für PR-Checks vs. Shipping-Builds Leere Stufen blockieren Jobs; Hardware pro Stufe planen
Team-Slice (team-mobile) Chargeback oder strikte Blast-Radius-Isolation Geringere Auslastung bei dünnen Slices; mehr Betrieb

Label-Namenskonvention (empfohlen)

  • Mindest-Triple: os + arch + xcode-<major.minor>, z. B. macos, arm64, xcode-16-2.
  • Optionale role-Suffixe: ci-pr, ci-release, experimental – keine Doppelverwendung mit anderem Xcode ohne Migrationsfenster.
  • GitHub-Standard self-hosted plus kanonische Liste intern und im Repo-README dokumentieren.

③ Warteschlange und Sperrstrategie

Parallele Warteschlangen auf einem Mac sind GitHub-Semantik, Physik (Kerne, SSD, Simulator) und Mutex um Signing. Konservativ starten, nur bei freien Metriken erhöhen.

Richtlinie Start-Schwelle Hinweis
Concurrency-Obergrenze (schwerer Compile/Archiv) 1 aktiver Job pro Mac-Klasse Zweiten Knoten vor dauerhaft parallelen Archiven auf einer Maschine einplanen
Concurrency (leichte Checks) Bis 2 Jobs, wenn CPU dauerhaft < ~75 % und freies RAM > ~8 GB Mit Workflow-concurrency: veraltete PR-Builds abbrechen
Globale Queue-Tiefe Alarm ab ca. 20 wartenden Jobs pro Pool Verhindert stille Mehrstunden-Backlogs
Mutex / Sperre Eine Signing-/Notarisierungssequenz pro Keychain Datei-, Redis- oder org-geprüfte Action für nicht reentrante Schritte

Vertiefung zu FIFO, Priorität und typischen Konflikten: FAQ geteilter Remote-Mac-Pool.

Fünf operative Umsetzungsschritte

  1. Kanonische Label-Liste festlegen und in jedem Workflow prüfen.
  2. Pro Pool eine dokumentierte Concurrency-Obergrenze und globale Queue-Tiefe überwachen.
  3. Signing-Schritte mit expliziter Sperre absichern; Keychains pro CI-Benutzer trennen.
  4. Platten-Schwellen (siehe nächster Abschnitt) in ein wöchentliches Runbook aufnehmen.
  5. Bei wiederholten SLA-Verstößen Mehrknoten oder dedizierte Release-Hosts einplanen statt nur Labels zu verschieben.

④ Berechtigung und Isolierung: Kernpunkte

Geteilte-Host-CI bricht bei verwaschenen Rechten: weltlesbare Artefakte, fehlende Profile, gemeinsame Login-Keychains. Dedizierte CI-Accounts, getrennte Homes, Automatisierungs-Keychains und setgid/ACL auf Shared-Dirs helfen.

Platten-Bereinigung: DerivedData/Caches leeren bei freiem Speicher unter ca. 15–20 % oder Projekt-Caches über ca. 30–80 GB (SSD anpassen). Keychains und Signing nie blind löschen. Mehr: SSH vs. VNC, Isolierung 2026.

Merksatz: Drei harte Zahlen – 1 schwerer Job pro Mac-Klasse als Startwert, freie Platte ≥15–20 % vor kritischen Releases, Queue-Tiefe ~20 als Frühwarnschwelle.

⑤ Monitoring und Alarmierung

Vier Signale: Runner-Heartbeat, Wartezeit bis Start, Sättigung (CPU/RAM/Platte), Auth-Fehler. Alarm bei PR-Wartezeit über SLO (oft 10–20 Min.) oder dauerhaft wenig freier Speicher.

Flaky CI oft mit SSH-Timeouts: Stabilitäts-FAQ, Reconnect-Checkliste. Skalierung: Mehrknoten Last & Failover.

⑥ FAQ

Ersetzen Labels ein echtes Warteschlangen-Produkt?
Nein. Labels filtern Runner. Für Priorität oder Fairness über Repos hinweg: GitHub-concurrency plus externer Koordinator – oder mehrere Remote-Mac-Knoten.
Wie viele Runner pro Maschine?
Schwere Builds: oft ein Runner pro Mac. Mehrere Runner erhöhen Parallelität und SSD-/Simulator-Stress ohne strenge Caps.
Wann lohnt sich ein Team- oder Mehrknoten-Paket?
Bei wiederholten SLO-Brüchen, routinemäßigen Signing-Kollisionen oder Wartung, die alle Repos gleichzeitig blockiert. Das sind strukturelle, keine Feintuning-Probleme – zusätzliche Knoten oder dedizierte Release-Hosts beheben sie nachhaltig.

Mehrknoten & Team-Pläne: CI ohne Single-Point-of-Failure

Wenn ein Host Label-Routing und parallele Warteschlangen nicht mehr sauber erfüllt, skalieren Sie mit mehreren gemieteten Macs: PR- und Release-Pools trennen, Xcode pro Maschine pinnen, Konflikte reduzieren. Auf der Startseite finden Sie Mehrknoten- und Team-Optionen; im Hilfezentrum SSH/VNC und Einrichtung; im Blog vertiefende Guides. Vor dem Ausbau lohnt der Vergleich Self-Hosted Runner vs. gemieteter Mac.

Mehrknoten / Mac mieten