← Retour au journal

GitHub Actions macOS auto-hébergé sur Mac cloud en 2026 : setup, Keychain, concurrence et coût

Notes serveur · 2026.05.22 · ~11 min

Runner macOS auto-hébergé GitHub Actions sur Mac mini cloud

Lorsque votre pipeline iOS déclenche l'archive xcodebuild une douzaine de fois par semaine, la facture par minute hébergée GitHub Actions macOS fait mal avant l'ingénierie. Ce dont les équipes de plate-forme ont réellement besoin, c'est d'une machine de build Mac cloud dédiée exécutant un exécuteur macOS auto-hébergé avec un trousseau stable, des chemins de données dérivés et une adresse IP de sortie vérifiable. Cet article couvre uniquement ce modèle d'atterrissage - et non le "xcode sous Windows". arbre de décision (VM vs cloud Mac vs CI) et non le playbook du siège de téléchargement TestFlight (Voie Canada M4 TestFlight).

Avant de choisir un hébergement hébergé ou un hébergement auto-hébergé, concentrez-vous sur trois idées :

  • MacOS hébergé : paiement à la minute

    Les pipelines lourds gonflent la facture en premier ; le prix public est souvent de quelques centimes par minute ; vérifiez-le sur votre facture.

    ≈ 0,08 $/min

  • Commencez avec un Mac cloud, une file d'attente

    Conservez les certificats de distribution et match sur un seul écrivain ; aucun combat de trousseau entre les hôtes.

  • Conçu pour des lots de nuit 24h/24 et 7j/7

    Les archives sans surveillance et la synchronisation des matchs ont battu un pool qui se réinitialise chaque semaine.

1. Quand abandonner les exécuteurs macOS hébergés ?

Les exécuteurs GitHub Actions macOS hébergés sont sans opérations et gérés par file d'attente. Coûts cachés : factures aux minutes de pointe, conservation des artefacts et débogage transpacifique sur les extraits de journaux uniquement. Envisagez de exécuteurs macOS auto-hébergés sur une machine de build Mac dans le cloud lorsque :

  • Un dépôt dépasse environ 3 000 minutes macOS/mois, les données dérivées froides dominant le temps passé sur le mur.
  • Vous avez besoin d'un nom d'hôte stable/IPv4 dédié pour l'API ASC, les webhooks ou les listes vertes d'entreprise.
  • Les certificats de distribution et correspondance doivent rester sur un unique rédacteur ; jamais sur un trousseau de pool hébergé partagé.
  • Engagements de jour en APAC avec des lots de nuit en Amérique du Nord : même siège au Canada que notarisation et amp; Publier des runbooks auto-hébergés.

2. Minutes hébergées vs siège dédié Cloud Mac

MacOS hébergé sur GitHub vs Mac auto-hébergé dans le cloud : comment choisir
Comparer Hébergé sur GitHub Par minute · zéro opération Cloud Mac auto-hébergé Siège fixe · Débogage SSH
FacturationPar minute + file d'attenteSiège mensuel fixe + opérations légères
EnvironnementL'image peut dériverVous épinglez Xcode, Ruby, Fastlane
Porte-clésInjection de secrets ; Déverrouillage limitéPorte-clés de connexion + préchauffage du lancement
DisqueÉphémère ; les grandes archives atteignent les limites512 Go à 2 To pour les données dérivées
DéboguerEnregistrer principalement des extraitsSSH et rejouer sur le même hôte
Idéal pourArtefacts iOS légers, builds sporadiquesTestFlight hebdomadaire, schémas parallèles

Dos de l'enveloppe : 5 000 minutes macOS/mois à ~0,08 $ ≈ 400 $/mois hébergé (avant multiplicateurs de pensions privées). Un siège Mac cloud M4 24 Go/512 se trouve souvent dans la même bande tout en assurant également l'acceptation VNC et le téléchargement Fastlane : l'avantage structurel d'une machine de construction Mac cloud par rapport au SaaS CI uniquement.

3. Étiquettes, simultanéité et limites d'un seul auteur

Ne mélangez pas la compilation, la signature et le téléchargement ASC dans une seule tâche en combattant le même trousseau. Une répartition sûre en 2026 :

  • Étiquettes : macos-m4-canada (région), signing (correspondance uniquement), build (parallèle 2 si 24 Go+).
  • Concurrence : signature des tâches concurrence : signature global 1 ; Les tâches de build peuvent en exécuter 2 par branche avec l'isolation des données dérivées.
  • Régions : coureurs APAC pour les peluches/unités ; Canada machine de création de Mac dans le cloud pour archive + exportArchive.
Vs Xcode Cloud
Xcode Cloud vend de l'intégration ; Les exécuteurs macOS auto-hébergés vendent des disques vérifiables et des Fastlane personnalisés. De nombreuses équipes utilisent les deux : Cloud sur PR, cloud Mac sur Release/match.

4. Enregistrez un coureur sur cloud Mac (premier hôte)

GitHub → Paramètres → Actions → Coureurs → Nouveau coureur auto-hébergé → macOS. SSH dans le cloud Mac ; préférez un utilisateur Unix dédié runner distinct des administrateurs VNC interactifs.

Enregistrer et installer en tant que service (exemple)
mkdir -p ~/actions-runner && cd ~/actions-runner
curl -o actions-runner-osx-arm64.tar.gz -L \
  https://github.com/actions/runner/releases/download/v2.319.1/actions-runner-osx-arm64-2.319.1.tar.gz
tar xzf actions-runner-osx-arm64.tar.gz
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO \
  --token VOTRE_TOKEN --labels macos-m4-canada,arm64 --sans surveillance
sudo ./svc.sh installer && sudo ./svc.sh démarrer
./run.sh --check

Workflow Smoke avec runs-on : [auto-hébergé, macos-m4-canada] exécutant sw_vers && xcodebuild -version. Épinglez Xcode via xcode-select et documentez la version dans README.

5. Porte-clés, correspondance et déverrouillage sans surveillance

Principal échec auto-hébergé : le codedesign ne trouve pas d'identité. Sur le cloud Mac :

  1. Importer le certificat de distribution dans le trousseau de connexion ; ACL pour codesign / sécurité.
  2. Dédiez une tâche match avec concurrence : signature ; d'autres tâches lisent uniquement les profils de provisionnement.
  3. Utilisez la security set-key-partition-list pour le déverrouillage CI et la machine de construction uniquement, ne jamais copier sur des ordinateurs portables.
  4. Définissez KEYCHAIN_PATH explicite dans les flux de travail afin que les trousseaux GHA éphémères ne correspondent pas à la sortie.
Extrait de workflow : épinglé auto-hébergé
emplois :
  archives :
    exécution : [auto-hébergé, macos-m4-canada, build]
    étapes :
      - utilise : actions/checkout@v4
      - nom : Archive de construction
        exécuter : |
          xcodebuild -scheme MyApp -configuration Release \
            -archivePath $RUNNER_TEMP/MyApp.xcarchive archive

6. Renforcement de la sécurité sur un coureur Mac cloud

Les exécuteurs auto-hébergés exécutent du code arbitraire à partir de vos référentiels (et des forks en cas de mauvaise configuration). Traitez la machine de build Mac dans le cloud comme un bastion de signature de production, et non comme une VM de loisir.

  • Portée du dépôt : préférez les exécuteurs au niveau de l'organisation avec des listes autorisées de dépôt explicites ; désactivez les workflows fork PR à moins que vous ne fassiez confiance aux protections de branche.
  • Séparation des utilisateurs : exécutez le service en tant que runner, et non en tant qu'administrateur ; refuser la connexion VNC pour cet utilisateur.
  • Secrets : stockez le mot de passe correspondant et la clé API ASC dans les environnements GitHub avec les réviseurs requis ; effectuer une rotation tous les trimestres.
  • Réseau : autoriser les GitHub + Apple CDN sortants ; bloquer les appels entrants, sauf SSH, à partir des adresses IP du bureau ou de Tailscale.
  • Chiffrement de disque : FileVault sur le cloud Mac est un enjeu de table ; les exportations d'instantanés doivent exclure *.p12 à moins qu'elles ne soient chiffrées au repos dans votre coffre-fort.
Menaces et atténuations sur un exécuteur Mac cloud
RisqueAtténuation sur le cloud Mac
Workflow de relations publiques de fork malveillantExiger l'approbation du contributeur ; pas d'auto-hébergement sur des forks publics
Jeton d'enregistrement voléJetons de courte durée ; réinscrire après la fenêtre de maintenance
Épuisement du disque pour les tâches parallèlesLimitations de concurrence + filigranes de disque (section suivante)
Fuite de données dérivéesÉtiquettes de signature séparées ; nettoyer RUNNER_TEMP après le travail

7. Opérations : filigranes de disque, mises à niveau Xcode, rotation des coureurs

Filigranes et actions du disque
NiveauUtilisation du disqueAction
Vert< 70 %Rotation des données dérivées datant de plus de 14 jours
Jaune70–85 %Drop parallèle 2 ; prune téléchargé Archives
Rouge> 85 %Bloquer les nouvelles archives ; VNC vérifie puis développe le disque

Mises à niveau mineures de Xcode : ./svc.sh stop, mise à niveau, workflow smoke, svc.sh start. Bump actions-runner package mensuel dans une fenêtre de maintenance ; conserver le répertoire précédent pour la restauration.

8. Coureurs au niveau de l'organisation et coureurs par dépôt

Les équipes de plate-forme dépassent rapidement l'enregistrement via un dépôt unique. GitHub Enterprise Cloud et GitHub Team peuvent associer des exécuteurs au sein de l'organisation avec des stratégies de groupe :

    Les
  • groupes d'exécution sont mappés aux environnements (par exemple, ios-release ne voit que les étiquettes signature).
  • Les exécuteurs éphémères (sous licence) effacent le disque après chaque tâche ; idéal pour les tâches de build non fiables, médiocre pour les caches de correspondance ; garder les données éphémères hors de l'hôte signataire.
  • Conseil de politique : Document sur les dépôts pouvant définir runs-on : [auto-hébergé] dans CODEOWNERS ; les workflows malveillants constituent le principal chemin d'exfil.

Lorsque deux gammes de produits partagent une machine de création de Mac dans le cloud, divisez-les par étiquettes plutôt que d'acheter un deuxième Mac jusqu'à ce que des alertes de disque jaune se déclenchent chaque semaine. Si les lignes nécessitent des versions Xcode incompatibles, arrêtez brutalement : ajoutez un deuxième siège au lieu de deux hacks xcode-select sur un volume.

repository_dispatch de la ferme de compilation APAC
# .github/workflows/canada-archive.yml
sur :
  référentiel_dispatch :
    types : [prêt pour l'archivage]
emplois :
  archives :
    exécution : [auto-hébergé, macos-m4-canada, build]
    étapes :
      - utilise : actions/checkout@v4
        avec :
          réf : ${{ github.event.client_payload.sha }}
      - exécuter : xcodebuild -scheme App archive -archivePath $RUNNER_TEMP/App.xcarchive

Les exécuteurs Linux APAC terminent les tests unitaires, puis sont expédiés au Canada avec le SHA de validation et les URL des artefacts. Ce modèle évite de payer des minutes macOS pour les peluches tout en conservant une latence des archives proche du CDN d'Apple en Amérique du Nord.

9. Observabilité : que consigner en cas d'échec des tâches

Les coureurs hébergés cachent l'infrastructure ; l'auto-hébergement vous oblige à posséder des signaux. Observabilité minimale viable sans facture Datadog complète :

  1. Envoyez ~/actions-runner/_diag/Runner_*.log à votre pile de journaux sur les builds rouges (rsync ou agent).
  2. Cron toutes les 5 minutes : df -h / + ./run.sh --check vers PagerDuty lorsque l'exécuteur est hors ligne > 10 minutes.
  3. Annotez les workflows avec run-id dans la sortie Fastlane pour corréler les erreurs de téléchargement ASC.
  4. Suivi de la profondeur de la file d'attente : si > 3 tâches macOS en attente, alertez le canal de la plate-forme avant que les développeurs ne blâment "GitHub est lent".

Les équipes transpacifiques devraient enregistrer le RTT du bureau APAC vers le cloud Mac SSH séparément de la latence de l'API GitHub, ce qui confond les deux pistes et conduit à de mauvaises décisions de mise à l'échelle (plus de coureurs contre une meilleure région).

10. Liste de contrôle du runbook de la première semaine

  1. Provisionner une machine de build Mac dans le cloud (24 Go/512 minimum ; 1 To si les versions hebdomadaires sont supérieures à 3).
  2. Enregistrer le coureur + les étiquettes ; conserver l'hébergement d'exécution par défaut jusqu'à ce que les workflows de version soient migrés.
  3. Fumée → archive vide → build interne signé (téléchargement facultatif).
  4. Suivez les minutes hébergées ; si toujours < 1 500 /mois, différer les pensions secondaires.
  5. Documenter la clé API ASC + correspondre à l'accès en écriture uniquement sur cet hôte.
  6. Alertes disque + conservation ~/actions-runner/_diag 7 jours.

14. FAQ

Les exécuteurs macOS auto-hébergés sont-ils autorisés ?

GitHub documente un support auto-hébergé de première classe ; vous possédez les correctifs et les secrets. N'installez pas sur des hôtes partagés non fiables.

Combien de coureurs par Mac cloud ?

Plusieurs dossiers sont possibles ; pour la signature iOS et les E/S disque, préférez une file d'attente par Mac physique et utilisez des étiquettes pour les types de tâches.

Matrices d'exécution ARM64 et de simulateur x86 ?

Les versions natives d'Apple Silicon sont celles par défaut ; ajoutez un Mac cloud Intel ou des coureurs hébergés uniquement si vous avez vraiment besoin de grilles de simulateur x86.

Agents GitLab macOS ?

Même modèle : hôte + agent macOS corrigé. Cet article reste la syntaxe GitHub Actions/workflow.

Repos privés et tarification à la minute ?

Au-dessus d'environ 3 000 minutes macOS/mois ou lorsque vous avez besoin d'une adresse IP/d'un trousseau fixe, un siège dédié l'emporte souvent en 2 à 3 mois.

Alertes de coureur hors ligne ?

Utilisez les API d'exécution GitHub (Enterprise) ou cron ./run.sh --check avec des sondes de disponibilité externes.

Hashvps convient-il ?

Oui, lorsque vous avez besoin de nœuds IPv4 dédiés, M4 Bare Metal et multirégions Canada/APAC : comparez les guides de latence et les niveaux de disque avant de procéder au paiement.

Dois-je mettre en cache les données dérivées sur les coureurs auto-hébergés ?

Oui sur Mac cloud dédié : montez un chemin stable comme /Users/runner/DerivedDataCache et des caches de clés par $(SWIFT_VERSION)-$(hash Package.resolved). Invalider sur les sauts de dépendance. Les coureurs hébergés le font déjà de manière opaque ; l'auto-hébergement en fait votre responsabilité, mais permet d'économiser 30 à 50 % de temps sur les builds incrémentielles.

Qu'en est-il du M4 Pro / 32 Go pour les cibles parallèles iOS + watchOS ?

Le xcodebuild parallèle avec 24 Go fonctionne pour deux applications de taille moyenne si la signature reste sérialisée. Ajoutez de la RAM avant d'ajouter un deuxième dossier d'exécution sur le même disque : la pression de la mémoire se manifeste sous forme de flocons de simulateur et de MOO clang énigmatique, mais pas d'alertes claires.

12. Migration en trois phases des minutes macOS hébergées

Le basculement Big Bang interrompt les trains de libération. Utilisez une migration progressive sur deux sprints :

Phase A (semaine 1) : Enregistrez Cloud Mac Runner ; exécuter des workflows fantômes sur workflow_dispatch uniquement ; comparez les journaux et les horaires avec les tâches hébergées sur le même commit. Ne touchez pas à la signature.

Phase B (semaine 2) : déplacer les tâches archiver vers exécution : [auto-hébergé, build] ; gardez upload_to_testflight hébergé ou manuel jusqu'à ce que le trousseau soit stable 5 nuits de suite.

Phase C (semaine 3+) : déplacer les tâches de correspondance et de signature vers l'étiquette signature avec la simultanéité 1 ; désactiver macOS hébergé sur la branche par défaut ; conserver une tâche hébergée d'urgence derrière workflow_dispatch pour la reprise après sinistre.

Communiquez avec les développeurs : le simulateur interactif reste sur les ordinateurs portables APAC ou les Mac cloud VNC ; CI Lane ne remplace pas un ordinateur de bureau. Cette gestion des attentes empêche les Mac mini du shadow IT sur les bureaux "parce que l'IC est lente".

Déclencheur de restauration : si la profondeur de la file d'attente auto-hébergée dépasse quatre tâches pendant deux heures ou si la conception du code échoue deux fois sur des validations non liées, réactivez l'archive hébergée pendant 48 heures pendant que vous vous connectez en SSH. Conservez un lien runbook dans le flux de travail README afin que l'astreinte ne récupère pas l'historique Slack à 2 heures du matin.

13. Feuille de calcul du TCO sur douze mois (copie dans Finance)

Les finances demanderont des chiffres comparables. Utilisez ce tableau comme modèle de départ ; branchez le niveau de minutes de votre organisation et le devis Cloud Mac.

Croquis du TCO sur 12 mois (remplacez par votre facture)
Élément de campagneMacOS hébergé (~ 5 000 min/mois)Un siège Mac dans le cloud
Calcul~400 $/mois variable~250 $ à 450 $/mois fixe
Main d'œuvre opérationnelleProche de zéro~4 heures/mois de correctifs
Risque de pannePics de file d'attente GitHubRunner hors ligne = version bloquée
Audit de signaturePlus difficile de prouver une adresse IP fixePreuve IPv4 + VNC dédiée
Seuil de rentabilitéSouvent les mois 2 à 4 lorsque les minutes macOS > 3k et match doivent rester stables

Ajoutez des économies cachées : moins de reconstructions après "fonctionne sur hébergé, échoue localement" dérive et une réponse aux incidents plus rapide lorsque SSH est à une commande du journal xcodebuild défaillant.

Le service financier peut vous demander pourquoi vous payez encore pour certaines minutes d'hébergement après la migration. Conservez un petit pool hébergé pour les miroirs open source, les PR d'urgence des forks ou les canaris bêta de Xcode que vous ne voulez pas sur l'hôte signataire : généralement 5 à 10 % des dépenses antérieures, et non zéro.

Épinglez les actions GitHub sur une véritable machine de build Mac dans le cloud

Les exécuteurs macOS auto-hébergés achètent la souveraineté de l'environnement : la mémoire unifiée M4 raccourcit les archives ; Le codesign natif et OpenSSH conservent Fastlane/match sur le même hôte que GHA ; ~ 4 W de ralenti et de silence sans ventilateur conviennent aux files d'attente 24h/24 et 7j/7 ; Gatekeeper et FileVault verrouillent les clés et les certificats API sur une sortie vérifiable, mieux que les pools hébergés à réinitialisation hebdomadaire pour les portes de publication.

Supprimer la facturation à la minute des workflows de release ? Comparez les forfaits cloud Mac et inscrivez votre premier coureur cette semaine.

Hashvps · Mac Cloud

Mac cloud dédié pour vos runners

Mac mini M4 bare metal, IPv4 dédiée, runners macOS 24/7 et lanes Fastlane.

Accueil
Offre limitée