Au 5 septembre 2026, le dépôt officiel de Runner Scale Set Client indique encore un statut « Public Preview » et confirme son rôle d’interface avec l’API de groupes de runners, non celui de fournisseur de machines Mac. Consultez le dépôt officiel de Runner Scale Set Client avant toute mise en production.
Notre recommandation pour cette semaine : conservez un petit socle de Mac Runner fixes si les tâches quotidiennes sont prévisibles, puis ajoutez une capacité élastique pour les publications, les fusions concentrées et les dépôts qui exigent une isolation forte. Ne remplacez pas toute l’infrastructure d’un seul coup : mesurez d’abord la file d’attente, le temps de livraison d’un nœud et la récupération après incident.
Cet article s’adresse :
- aux responsables d’équipes mobiles qui veulent absorber les pics Xcode sans payer des nœuds inutilisés toute l’année ;
- aux ingénieurs DevOps et plateforme qui doivent organiser l’inscription, le routage, l’isolation et la récupération des runners ;
- aux responsables sécurité ou publication qui doivent décider si des certificats, trousseaux et dépendances privées peuvent être injectés dans un nœud temporaire.
Dernière mise à jour : 5 septembre 2026. Les informations sur Runner Scale Set Client, les groupes de runners, les runners éphémères et la sécurité ont été vérifiées dans la documentation GitHub et le dépôt officiel mentionné ci-dessus.
Le choix dépend d’abord de la forme réelle de la charge
La question n’est pas de savoir si l’auto-hébergement Mac peut s’adapter automatiquement en théorie. Il faut déterminer quelle partie de la charge mérite une machine toujours prête et quelle partie peut attendre la livraison d’un hôte temporaire.
Un Mac Runner fixe reste préférable lorsque les tâches proviennent d’un nombre limité de dépôts, que les versions de Xcode changent peu et que les caches, simulateurs, dépendances audio ou projets vidéo doivent rester disponibles. La préparation initiale est alors amortie par une utilisation régulière. Cette architecture facilite aussi le diagnostic d’un échec de compilation : l’environnement est persistant et l’équipe connaît son état.
Un ephemeral runner devient plus pertinent lorsque la charge est irrégulière, que plusieurs dépôts se partagent le calcul ou que la séparation des environnements est prioritaire. Chaque tâche peut alors recevoir une instance préparée pour son usage, à condition que le processus de création, d’inscription, de retrait et de nettoyage soit réellement automatisé.
La plupart des équipes n’ont donc pas intérêt à choisir entre deux modèles absolus. Un socle fixe protège les livraisons critiques ; une réserve élastique absorbe les pointes qui seraient trop coûteuses à couvrir avec des machines permanentes.
Point de contrôle : une inscription temporaire du runner ne prouve pas que le système de fichiers du Mac a été nettoyé. Les caches Xcode, journaux, fichiers de travail et éléments de trousseau doivent être supprimés ou la machine doit être détruite selon une procédure vérifiable.
Les charges quotidiennes et les pics de publication ne se gèrent pas de la même façon
Charge stable : préserver l’outil plutôt que multiplier les machines
Pour un dépôt qui compile et teste à un rythme relativement régulier, le runner fixe offre trois avantages concrets :
- les composants coûteux à préparer peuvent rester en cache ;
- les versions d’Xcode et les simulateurs sont contrôlés dans la durée ;
- les erreurs liées à une préparation incomplète sont plus faciles à reproduire.
Cependant, la stabilité ne justifie pas un accès ouvert à tous les dépôts. Les groupes de runners permettent de restreindre quels dépôts peuvent utiliser un ensemble donné ; les règles d’accès sont décrites dans la documentation officielle des Runner Groups. Un runner fixe destiné à la publication ne devrait pas être sélectionné par un projet expérimental simplement parce qu’il possède le bon libellé.
Pour décider, nous recommandons d’extraire des workflows existants la durée d’attente avant démarrage, le temps d’occupation, les causes d’échec et la fréquence des tâches simultanées. Le nombre de développeurs est un indicateur trop indirect : une petite équipe peut générer une file importante lors d’une publication, tandis qu’une équipe plus grande peut avoir une charge très étalée.
Pic prévisible : distinguer la file d’attente du besoin permanent
Une fusion importante ou une publication concentrée peut provoquer une file d’attente pendant une courte période, alors que les runners restent largement disponibles le reste du temps. Ajouter des nœuds permanents dans ce cas résout le symptôme, mais augmente la capacité inactive et la surface de maintenance.
Trois réponses sont possibles :
- renforcer le socle fixe, si les pics sont fréquents et si les outils doivent rester chauds ;
- préparer des runners temporaires, si le pic est identifiable à l’avance et si l’environnement est reproductible ;
- déclencher une capacité à partir d’un signal de file, si l’équipe peut fournir un Mac assez rapidement pour que la demande disparaisse avant l’expiration du délai acceptable.
La décision doit être testée avec les vrais types de tâches : compilation seule, tests sur simulateur, export d’archive, signature, publication et éventuellement rendu audio ou vidéo. Un nœud livré trop tard ne constitue pas une capacité élastique utile, même si le mécanisme de mise à l’échelle fonctionne techniquement.
Les dépôts partagés exigent une isolation explicite
Un même pool ne doit pas devenir un raccourci de confiance
Le partage de Mac entre dépôts peut réduire le nombre de machines administrées, mais il augmente les risques de contamination croisée. Un espace de travail oublié, une dépendance mise en cache, un fichier de configuration ou une session de trousseau peuvent influencer le résultat d’un autre workflow.
La première séparation doit porter sur le niveau de confiance. Nous distinguons généralement :
- les dépôts internes qui utilisent uniquement des dépendances maîtrisées ;
- les projets qui consomment des paquets externes ou des contributions de provenance variable ;
- les tâches de publication qui manipulent des certificats, des profils et des secrets ;
- les travaux créatifs, comme l’export vidéo ou audio, qui nécessitent parfois des applications et bibliothèques différentes.
Les libellés servent au routage, mais ils ne remplacent pas les contrôles d’accès. La documentation GitHub sur les libellés des runners auto-hébergés doit être utilisée avec les groupes et les restrictions de dépôt, plutôt qu’avec un libellé unique partagé par toute l’organisation.
Comment éviter la contamination entre dépôts ?
L’isolement doit être accepté seulement après vérification de cinq éléments :
- le dépôt autorisé peut réellement atteindre le groupe prévu ;
- le workflow ne peut pas sélectionner un groupe plus privilégié par simple modification de libellé ;
- le répertoire de travail est supprimé après l’exécution ;
- les caches et fichiers temporaires sont purgés ou séparés par confiance ;
- les journaux externes permettent de relier le dépôt, le runner, la tâche et l’opération de nettoyage.
Avec un Mac persistant, il faut en plus programmer une réinitialisation périodique et conserver un nœud de secours. Avec un runner éphémère, il faut vérifier que la machine elle-même est supprimée, redémarrée dans un état propre ou replacée dans un pool non sensible. La fin de l’enregistrement GitHub n’est qu’une étape de contrôle, pas une preuve d’effacement.
Signature, réseau privé et Apple Silicon changent le niveau de risque
Les tâches de compilation ordinaire sont de bonnes candidates à l’élasticité. Les tâches de signature et de publication demandent une décision plus prudente, car elles dépendent souvent d’un trousseau, de certificats, d’un profil de provisionnement, d’un dépôt privé ou d’une connexion réseau interne.
Un runner fixe peut simplifier la maintenance de cet état complexe, mais il doit alors être fortement limité : accès à quelques dépôts, approbation des workflows, secrets réduits au nécessaire et journalisation indépendante. Les recommandations de sécurité pour les runners auto-hébergés rappellent pourquoi un runner qui exécute du code contrôlé par plusieurs sources ne doit pas être traité comme une machine neutre.
Un runner temporaire est acceptable si les secrets sont injectés au dernier moment, si leur durée de vie est limitée, si leur révocation est automatique et si la machine est retirée après la publication. Une telle chaîne est plus saine sur le plan de l’isolation, mais plus exigeante à opérer.
L’architecture Apple Silicon mérite aussi une validation séparée. Le bon processeur ne suffit pas : il faut confirmer la disponibilité de la version d’Xcode, des simulateurs, des outils de signature, des dépendances natives et des extensions utilisées par le projet. Pour une équipe qui compare plusieurs générations de Mac, notre guide de sélection des nœuds de compilation Apple Silicon peut servir de point de départ, sans remplacer un essai avec le workflow réel.
Runner Scale Set Client apporte le signal, pas le Mac
Runner Scale Set Client prend-il en charge les nœuds macOS ?
Oui, le périmètre confirmé permet de construire une solution élastique personnalisée incluant des nœuds macOS. Le client dialogue avec l’API de Runner Scale Set et produit une configuration temporaire destinée à l’inscription du runner. En revanche, il ne crée pas automatiquement le Mac, ne le démarre pas, ne l’efface pas et ne garantit pas sa remise en état.
Cette distinction est essentielle. Une équipe qui possède déjà un mécanisme fiable de livraison de Mac peut utiliser le client comme couche de coordination. Une équipe qui espère obtenir automatiquement une machine à partir d’un simple réglage GitHub doit encore concevoir toute la partie infrastructure.
Il faut également éviter de transposer directement le fonctionnement d’Actions Runner Controller. La documentation officielle décrit ARC autour de runners gérés dans un environnement Kubernetes ; cela ne signifie pas qu’un Mac physique ou hébergé est créé comme un pod. La présentation officielle d’Actions Runner Controller aide à maintenir cette frontière conceptuelle.
La chaîne minimale de validation
Avant d’autoriser la capacité élastique sur une publication, nous testons la chaîne complète :
- une file d’attente dépasse le seuil défini ;
- le contrôleur demande une capacité ;
- l’infrastructure fournit un Mac compatible ;
- le runner s’inscrit avec une configuration temporaire ;
- un seul workflow de test est routé vers ce nœud ;
- la tâche se termine et le runner se désinscrit ;
- l’hôte est nettoyé, détruit ou remis dans un pool explicitement approuvé ;
- les journaux restent consultables même si le runner disparaît.
L’ajout d’un runner au service doit aussi suivre une procédure contrôlée ; la documentation officielle d’ajout des runners auto-hébergés ne doit pas être remplacée par des scripts contenant des secrets dans le dépôt.
Une panne d’élasticité doit laisser une voie de publication
Une architecture uniquement élastique peut échouer à plusieurs endroits : signal de file non traité, Mac indisponible, démarrage incomplet, mise à jour du runner interrompue, réseau privé inaccessible ou journaux absents. La réponse ne consiste pas seulement à augmenter le délai d’attente.
Nous conseillons de conserver un socle fixe capable d’exécuter au moins la publication critique. Les tâches non urgentes peuvent être suspendues lorsque le délai maximal est atteint. Le contrôleur doit aussi disposer d’un mode pause pour empêcher une boucle de création de machines, et d’une procédure d’intervention manuelle sans exposer les secrets dans les journaux.
Les outils officiels de surveillance et de dépannage des runners doivent être complétés par des événements d’infrastructure : demande de nœud, démarrage, échec de préparation, inscription, fin de tâche, nettoyage et suppression. Sans cette corrélation, une file vide peut simplement signifier que les tâches échouent avant d’atteindre un runner.
La matrice de décision pour choisir sans surdimensionner
Utilisez les conditions suivantes avant de modifier la capacité :
- Si la charge quotidienne est régulière, que les caches sont importants et que les dépôts sont peu nombreux, choisissez un runner fixe. Sinon, examinez l’option temporaire.
- Si les pics sont prévisibles, courts et séparables des tâches ordinaires, préparez un pool élastique. Sinon, renforcez d’abord le socle fixe.
- Si plusieurs dépôts ont des niveaux de confiance différents, séparez les groupes et les routes. Sinon, un pool commun peut rester envisageable avec des contrôles documentés.
- Si une tâche utilise des certificats ou un réseau privé, conservez-la sur un runner fixe durci tant que l’injection et la révocation temporaires ne sont pas démontrées.
- Si le temps de livraison du Mac dépasse le délai acceptable de la file, revenez au socle fixe ; l’élasticité ne doit pas être évaluée uniquement sur le nombre de nœuds créés.
- Si l’effacement de l’hôte ne peut pas être prouvé, n’envoyez pas de tâches provenant de dépôts de confiance différente vers ce pool.
| Situation observée | Choix recommandé | Preuve à recueillir | Échec typique |
|---|---|---|---|
| Compilation quotidienne régulière | Runner fixe | Attente faible et état reproductible | Nœud laissé accessible à trop de dépôts |
| Publication concentrée | Socle fixe plus pool élastique | File, délai de livraison et durée de pointe | Nœuds temporaires prêts après la publication |
| Plusieurs dépôts et niveaux de confiance | Groupes séparés, souvent avec runners temporaires | Routage, nettoyage et journaux externes | Contamination par cache ou espace de travail |
| Signature et réseau privé | Runner fixe durci au départ | Contrôle des secrets et procédure de secours | Certificats copiés sans révocation claire |
| Tests isolés sur Apple Silicon | Runner temporaire possible | Version Xcode, simulateurs et dépendances natives | Environnement neuf mais incomplet |
Nous attribuons une note de décision, non pas à la technologie seule, mais à la capacité de l’équipe à démontrer chaque étape :
| Critère | Runner fixe | Runner éphémère | Architecture hybride |
|---|---|---|---|
| Prévisibilité quotidienne | Forte | Variable | Forte |
| Absorption d’un pic | Moyenne | Forte | Forte |
| Conservation des caches | Forte | Faible, sauf préparation contrôlée | Forte pour le socle |
| Isolation entre dépôts | Moyenne | Forte si l’hôte est réellement nettoyé | Forte par séparation |
| Complexité opérationnelle | Faible à moyenne | Élevée | Élevée mais progressive |
| Continuité en cas de panne du contrôle élastique | Forte | Faible | Forte |
Cette grille ne remplace pas un essai. Faites fonctionner un workflow de compilation, un workflow de test, une publication signée et une tâche d’échec volontaire. Vérifiez ensuite la file, les journaux, le retrait du runner, l’état de l’hôte et la possibilité de reprendre la publication avec le socle fixe.
Quand louer un Mac devient plus rationnel que conserver toute la capacité
Conserver uniquement des Mac internes ou des nœuds achetés pour couvrir les pics présente trois défauts : une partie de la capacité reste inactive entre les publications, le remplacement matériel devient une responsabilité permanente et la livraison de plusieurs environnements Apple Silicon peut ralentir les essais. Une machine virtuelle ou un serveur non macOS ajoute d’autres limites pour Xcode, la signature, les simulateurs et les outils exclusivement disponibles sur macOS.
Dans ce contexte, la location d’un Mac réel peut servir de capacité temporaire pour un essai de montée en charge, une branche de publication ou un pool de secours, sans imposer la détention annuelle de tous les nœuds. JexMac permet d’examiner les périodes de location Mac disponibles, puis de vérifier les modalités de mise à disposition avant d’intégrer le nœud à une chaîne CI.
Il faut toutefois rester lucide : pour une charge lourde, stable et permanente, acheter ou administrer une infrastructure dédiée peut être plus cohérent ; la location est moins adaptée lorsqu’un périphérique physique précis doit rester connecté en permanence. Elle devient intéressante lorsque le besoin est temporaire, difficile à prévoir ou limité à une phase de validation. Pour une première expérimentation, consultez aussi les modalités de commande d’un Mac distant et reproduisez le workflow complet avant de déplacer la publication critique.
Commencez par marquer dans la matrice ce qui constitue votre charge de base et ce qui correspond au pic de publication. Si le socle fixe suffit au quotidien mais que les pointes immobilisent les développeurs, une capacité Mac louée peut être testée comme pool de débordement ; si le besoin est permanent, utilisez plutôt l’essai pour confirmer les exigences d’une architecture durable que pour masquer une capacité structurellement insuffisante.
Adaptez vos runners macOS avec JexMac
Déployez un Mac mini M4 physique et dédié pour disposer d’un environnement stable, reproductible et sans virtualisation.