Mac CI · DevOps et CI/CD 31 mars 2026

2026 Playbook : drain des runners Mac CI auto-hébergés, fenêtres de maintenance et passation sans interruption sur Mac mini M4

Équipe NodeMac

Rédaction fiabilité plateforme

Les hôtes de build Mac mini sont des nœuds planifiables, pas des animaux de compagnie—pourtant redémarrer sans drainer l’orchestrateur inonde encore Slack en rouge. Ce playbook 2026 définit comment suspendre le nouveau travail, terminer les jobs en cours en sécurité, basculer les étiquettes vers une capacité de remplacement et communiquer les délais pour que les développeurs fassent confiance à l’équipe plateforme. Vous obtenez deux tableaux comparatifs, des seuils de drain numériques et neuf étapes ordonnées qui fonctionnent sur des flottes auto-hébergées type GitHub Actions et se transposent à d’autres files d’attente macOS.

Si les runners ne sont pas encore enregistrés, commencez par GitHub Actions auto-hébergé sur Mac mini M4. Quand la maintenance suit une promotion d’image plus large, enchaînez après les bascules canary et blue-green pour ne pas drainer les hôtes au milieu d’une promotion. Si les attentes explosent pendant la fenêtre, interprétez les métriques avec la profondeur de file et les SLO de temps d’attente avant d’accuser les « correctifs lents ».

Modes d’échec quand on saute un drain formel

  • Jobs de compilation tués : un reboot pendant xcodebuild gaspille 15 à 40 minutes murales et abîme la confiance pendant des semaines.
  • Verrous d’espace de travail orphelins : une fin brutale laisse des fichiers .lock ou des simulateurs qui font échouer la dizaine de jobs suivants.
  • Surprises de rotation des secrets : la maintenance inclut souvent Keychain ou clés API ; les jobs en cours peuvent garder d’anciennes identités jusqu’à une sortie propre.

Matrice de stratégie de passation

Approche Capacité supplémentaire Risque visible utilisateur
Drain par étiquettes + secours chaud Pool de remplacement 1:1 Faible si le secours est préchauffé
Drain limité dans le temps seulement Aucune Moyen—files plus longues
Arrêt dur / reboot Aucune Élevé—jobs en échec

Quand continuer d’attendre ou forcer la fin

Observation Seuil Action
Âge du job en cours le plus ancien < 50 min Attendre—probable long test sain
Âge du job en cours le plus ancien > 95 min Alerter le propriétaire ; envisager annulation + retry sur hôte neuf
Profondeur de file vs SLO attente p95 +25 % Activer étiquettes de débordement ou location Mac cloud temporaire
Gravité du correctif sécurité CVSS ≥ 9 Fenêtre d’annulation approuvée direction

Vérité des étiquettes : drainer, c’est retirer l’hôte du sélecteur entrant, pas supprimer le binaire. Gardez le service installé pour réactiver en minutes si la maintenance glisse.

Checklist de passation maintenance en neuf étapes

  1. Ouvrir un ticket de changement : noms d’hôtes, type de maintenance, durée prévue, responsable du retour arrière.
  2. Annoncer tôt : poster dans les canaux dev au moins 24 h avant un travail en heures ouvrées ; 72 h pour des drains multi-régions.
  3. Vérifier la capacité de secours : confirmer que les runners de remplacement affichent Idle dans l’UI de l’orchestrateur.
  4. Retirer la cible du drain des étiquettes par défaut : arrêter de planifier de nouveaux jobs ; laisser finir les jobs en cours.
  5. Surveiller le nombre en cours : rafraîchir toutes les 5 minutes ; journaliser les anomalies.
  6. Quand le compteur atteint zéro : arrêter proprement le service runner ; capturer les derniers logs.
  7. Effectuer la maintenance : correctif OS, nettoyage disque, install Xcode—notes pour le CMDB.
  8. Test de fumée avant réactivation : lancer un workflow canonique couvrant compilation, signature et upload.
  9. Rattacher les étiquettes en basse charge : surveiller l’attente p95 pendant 60 minutes avant de clôturer le ticket.

Crochets d’automatisation qui gardent les humains honnêtes

Les checklists manuelles échouent quand l’astreinte est novice ou fatiguée. Encodez le chemin heureux dans l’automatisation : un job qui bascule les étiquettes via API, ouvre le ticket de changement et poste le message Slack pré-rédigé réduit la variance. Gardez une porte humaine avant les chemins kill -9—l’automatisation ne doit jamais rebooter un hôte tant que running_jobs > 0 sans ID d’incident break-glass. Les équipes qui câblent correctement voient la durée médiane de maintenance baisser de 18 à 30 % car personne ne retape vingt minutes les mêmes étapes « kubectl pour Mac » de mémoire.

  • Webhook au début du drain : émettre un événement vers la stack métriques avec nom d’hôte et fin prévue.
  • Alerte si jobs en cours plats pendant 20 min : signale un exécuteur bloqué plutôt qu’une longue compilation.
  • Expiration auto du mode maintenance : pager si les étiquettes restent détachées plus de 4 h sans clôture—quelqu’un a oublié le dernier basculement.

Traitez l’automatisation comme une documentation qui s’exécute : chaque branche doit journaliser du JSON structuré pour que les post-mortems rejouent la timeline sans archéologie SSH. Quand vous louez des Mac de débordement temporaires, taguez-les au CMDB avec le même préfixe d’étiquette que votre automatisation attend—les noms d’hôtes ad hoc font souvent entrer deux runners en double et voler la moitié de votre file.

Secours régional et location de pic

Si votre seul pool Mac est dans une métropole, les drains deviennent inévitablement des événements de file. Placer des Mac mini M4 de secours à Hong Kong, au Japon, en Corée, à Singapour ou aux États-Unis absorbe la maintenance sans expédier d’ordinateurs portables. Les tarifs régionaux NodeMac soutiennent des locations courtes pour ces fenêtres de chevauchement. Associez la location à la documentation d’aide SSH/VNC quand il faut une vérification interactive après un correctif.

Modèles de communication qui réduisent les tickets

La discipline copier-coller compte. Incluez quatre faits à chaque fois : étiquettes impactées, fenêtres début/fin en UTC et heure locale, où voir la profondeur de file en direct, et que faire si un job reste bloqué au-delà de l’annonce. Les équipes qui omettent la consigne « job bloqué » voient une multiplication par 3 des tickets IT dupliqués dans la première heure—mesurez une fois et vous ne sauterez plus cette ligne.

Après les gros drains, faites une rétro de 15 minutes : le temps d’indisponibilité réel a-t-il dépassé l’estimation, une équipe a-t-elle contourné les étiquettes avec des noms de runners codés en dur, la capacité de débordement a-t-elle réellement pris le trafic ? Injectez les réponses dans votre prochaine RFC de maintenance pour que le processus se compose au lieu de repartir de zéro chaque trimestre. Joignez une capture du graphe « jobs en cours » de l’orchestrateur au ticket pour que les relecteurs voient une preuve objective, pas un souvenir.

FAQ

Faut-il drainer pendant les semaines de gel des releases ?

Préférez reporter les correctifs cosmétiques ; si la sécurité impose l’action, préprovisionnez des hôtes supplémentaires et raccourcissez la fenêtre de drain plutôt que de sauter entièrement le processus.

Et si la maintenance dépasse la fenêtre de changement ?

Prolongez d’abord le routage des étiquettes de secours, puis envoyez une mise à jour explicite « pas encore terminé » avec une nouvelle estimation. Revenir à l’ancienne image coûte moins cher qu’affamer silencieusement la file pendant que la direction suppose que la CI est saine.

Le matériel Mac mini M4 rend le calcul de drain prévisible : Apple Silicon maintient une consommation stable sous charge mixte compilation et simulateur, la mémoire unifiée réduit les blocages liés au swap pendant de longs drains, et l’isolation physique fait que les hôtes de secours se comportent comme la production—pas des thermiques d’ordinateur portable qui brident au milieu de la file. NodeMac fournit des Mac mini dédiés avec SSH et VNC à HK, JP, KR, SG et US pour que les pools de secours soient de vrais nœuds datacenter plutôt que des VM partagées. La location de capacité de pic transforme la saison de maintenance en ligne budgétaire planifiable à côté des bascules et audits.

Ajoutez de la capacité Mac CI de secours

Louez des nœuds M4 à HK·JP·KR·SG·US pour les chevauchements de maintenance—SSH/VNC quand il faut voir la console.

NM
NodeMac Cloud Mac
Déploiement 5 min

Louez un Mac Apple Silicon dédié dans le cloud. SSH/VNC, nœuds HK·JP·KR·SG·US.

Démarrer