Für wen: Teams, die GitHub Actions oder GitLab bereits auf Apple-Silicon-Hosts in Singapur, Tokio, Seoul, Hongkong, US East und US West betreiben und nun Jenkins oder Buildkite für genehmigungslastige Pipelines oder integrationsreiche Queues brauchen – ohne dass zwei Scheduler dieselbe NVMe und denselben Signaturkontext gleichzeitig sättigen. Ergebnis: ein schriftlicher Vertrag aus versetzten UTC-Fenstern, Fähigkeits-Labels und DerivedData-Namensräumen plus Kriterien, wann Tages- oder Wochen-Mieten für Burst nur bei vorhersehbaren Release-Spitzen sinnvoll sind. Aufbau: sechs Fallen → zwei Entscheidungstabellen → einfügbare Snippets → Sechs-Schritte-Runbook → drei KPIs → Abschlussempfehlung; lesen Sie parallel den Leitfaden zu eigenen Runner-Labels und Relay-CI über Zeitzonen.
Remote-Macs vermischen 2026 oft interaktive Arbeit, nächtliche CI und Signatur-Allowlists. GitHub Actions und GitLab mappen Repository-Ereignisse bereits sauber auf Queues. Mit Jenkins-Controller oder Buildkite-Queues fügen Sie eine zweite Regelschleife auf derselben Ausführungsfläche hinzu. Ohne zeitliche Versetzung und Pfad-Isolation entsteht Überlagerung: Controller A meint, der Host sei idle, während Controller B vier parallele xcodebuild-Jobs unter demselben Benutzer startet. Die sechs Fallen unten sind die schnellsten Wege, „Self-Hosting-Zuverlässigkeit“ zu verspielen.
mac oder ios drücken Xcode-Minor, Signaturbedarf oder UI-Sessions nicht aus; Jenkins und Actions dispatchen blind in denselben Kontext.max-parallel stoppt keinen anderen Controller, der im selben macOS-Konto Jobs startet.Wenn Runner-Labels und Geheimnis-Isolation noch nicht dokumentiert sind, kehren Sie vor dem zweiten Controller zum Checkliste GitHub Actions und GitLab Runner zurück. Ergänzen Sie diesen Text mit dem Beitrag reproduzierbarer Build-Snapshot und tragen Sie DerivedData-Präfixe pro Controller auf dieselbe Baseline-Seite ein.
Für Architekturreviews; Intervalle beschreiben übliche Engineering-Trade-offs, keine Hersteller-SLAs.
| Dimension | Jenkins (typisch selbst gehostete Steuerung) | Buildkite (gehostete Steuerung, eigene Agenten) | Koexistenz mit Actions/GitLab |
|---|---|---|---|
| Queues & Freigaben | Reife Plugins für parametrisierte Releases | Klare Pipeline- und Multi-Repo-Queue-Ansichten | Teilen Sie niemals ein Standard-Label-Set; präfixen Sie Tags z. B. mit bk- oder jk- |
| Ausführungskopplung | Sie richten Controller- und Agentenversionen aus | Agent-Upgrades können unabhängig von SaaS-Releases laufen | Upgraden Sie Agenten innerhalb der Versetzungsfenster, bevor Sie Parallelität erhöhen |
| Betriebslast | Höher (Plugins, Backups, Upgrades) | Mittel (Agenten + Bootstrap-Geheimnisse) | Dokumentieren Sie, wer nach welcher UTC-Stunde macOS-Jobs planen darf – keine rein mündliche Policy |
Hinweis: Buildkite drückt Affinität über Queue-Namen und Agent-Tags aus; Jenkins nutzt Labels und Node-Properties. Unterschiedliches Vokabular, gleiches Ziel: Xcode Major/Minor, Signaturbedarf und UI-Session-Policy kodieren, damit Scheduler nicht raten.
Exklusives Bare Metal, gesunde NVMe, keine schweren Sidecars wie dauerhafte LLM-Gateways. Stimmen Sie mit Ihren Compile-Graphen ab; die Zahlen sind Plananker, keine Benchmarks.
| Hardware | Typische parallele Nicht-UI-Builds | Mit mehreren Simulatoren / UI-Tests | Hinweis sechs Regionen |
|---|---|---|---|
| Mac mini M4 | Oft ein bis zwei schwere Kompilate plus leichte Tasks | UI-Tests zeitlich von schweren Kompilaten wegschneiden, um Queue-Tiefe stabil zu halten | Mit primärer Git-Region colocieren, um Fetch-Schwanz in engen Versetzungsfenstern zu verkürzen |
| M4 Pro | Oft zwei bis drei parallele Builds je Modulgraph | Mehr Simulator-Worker möglich, dennoch getrennte Cache-Wurzeln pro Controller nötig | Lange Artefakt-Uploads von kurzen Inner-Loop-Builds über Miet-Pools trennen, wenn Regionen auseinanderlaufen |
mac-01 verbieten.~/DerivedData-gha und ~/DerivedData-bk, -derivedDataPath explizit setzen.m4-signing nur UTC 10:00–14:00“; an die Business-Zeitzonentabelle im Relay-CI anbinden.burst an Queues hängt.# Buildkite-Beispiel: Queue + Agent-Tags (Namespace anpassen)
steps:
- label: "iOS build (versetzter Pool)"
agents:
queue: "mac-m4"
os: "darwin"
xcode: "16.2"
controller: "buildkite"
commands:
- xcodebuild -scheme App -destination 'generic/platform=iOS' -derivedDataPath "$BUILDKITE_BUILD_PATH/DerivedData-bk"
# Jenkins: spiegeln mit Node-Labels + Pipeline-Env für DERIVED_DATA
Schwellen sind empirische Leitplanken, keine Apple- oder Cloud-SLAs; stimmen Sie sie mit Ihrem SRE-Stack ab, um doppelte oder stille Alarme zu vermeiden.
Regelungstechnisch fügt ein zweiter Controller eine weitere Rückkopplung hinzu. Bleiben NVMe und Signaturkontexte geteilt, koppeln auch elegante Steuerungen unter Last. Logische oder physische Cache-Isolation wiegt schwerer als weitere Agenten-Registrierungen. Über sechs Regionen hinweg Git- und Artefaktplatzierung mitentwerfen; nur CPU zu versetzen behebt keine Cross-Region-Bulk-Transfers.
Dual-Controller-Setups erhöhen den Anspruch an Auditierbarkeit: Versetzungsfenster, Label-Wörterbuch und Geheimnis-Reihenfolge müssen reviewbar sein. Opportunistisches Teilen ohne exklusive Tenancy oder Miet-Obergrenzen drückt Jenkins und Actions bei Firefighting in denselben interaktiven Benutzer – Compliance und Triage-Kosten skalieren schlecht.
Private Laptops und informelle Shared-Hosts liefern selten stabilen Egress, Keychain-Grenzen und schriftliche Versetzungspolicy zugleich. Wenn Organisationen Compile-Pools von Genehmigungs- oder Signatur-Pools zwischen APAC und Nordamerika trennen, schneiden geführte Bare-Metal-Mac-Clouds mit Mehrregionen-Fußabdruck und planbaren Monats- oder Quartalsmieten meist besser ab als Ad-hoc-Koordination. MACCOME stellt Apple-Silicon-Bare-Metal-Knoten in sechs Regionen mit flexiblen Storage-Stufen bereit – nutzbar, um Agenten-Pools per Label zu isolieren, bevor Sie Parallelität erhöhen. Prüfen Sie die öffentlichen Mietpreise und wählen Sie Regional-Seiten passend zum Artefaktpfad. Verarbeiten Sie personenbezogene Build-Logs oder Artefakte in der EU, sollten Sie Speicherorte, Auftragsverarbeitung und ggf. Datenresidenz mit Ihrer DSGVO-/Datenschutz-Dokumentation abstimmen.
Pilotmuster: zwei Hosts nahe primärem Git und Kollaborations-Region, zwei Wochen einen Controller unter KPI, dann das Versetzungsfenster für den zweiten öffnen – Controller- und Kapazitätswechsel nicht in derselben Release-Nacht.
FAQ
Können Jenkins und GitHub Actions einen macOS-Benutzer teilen?
Möglich, aber schwaches Ziel: Konten und DerivedData trennen. Für Knoten- und Miet-Baselines siehe den Mehrregionen-Knoten-Leitfaden.
Das Business hat unser Versetzungsfenster gebrochen – was nun?
Als KPI-Vorfall loggen und Labels gegen Kapazität prüfen; finanzieren Sie eine dedizierte M4-Pro-Monatspool für Freigabe-Ketten statt unbegrenzter Parallelität. Hilfe: Hilfe-Center.
Sollen Agent-Upgrades dieselbe Nacht wie Xcode-Upgrades landen?
Besser nicht: gleichzeitige Änderungen verhindern saubere Bisection. Halten Sie die Einfrier-Reihenfolge im Sechs-Schritte-Runbook ein und lesen Sie den Runner-Label-Playbook mit.