Comment connecter Buildkite CI iOS d’entreprise à un Mac ? Guide 2026

L’étape iOS reste en attente ou échoue sur un nœud qui ne dispose pas de Xcode.

La voie rapide consiste à laisser Buildkite orchestrer le pipeline, puis à confier au Buildkite Agent sur Mac les tâches qui dépendent de macOS ou de Xcode ; les étapes compatibles avec Linux restent dans leur environnement. Une file route les tâches, mais ne sépare pas à elle seule les machines ni les secrets.

Ce guide s’adresse aux équipes plateforme qui migrent une chaîne iOS vers Buildkite et doivent vérifier le routage des tâches.
Il concerne aussi les responsables IT chargés du compte macOS, de l’agent et de la maintenance des nœuds.
Les responsables de la sécurité et des publications y trouveront des critères pour distinguer tests, code non fiable et signature de production.

Avant d’installer un agent, séparez les étapes selon leurs dépendances réelles. Buildkite orchestre les étapes et les agents les exécutent sur leurs hôtes. Les tâches qui invoquent Xcode, les simulateurs Apple ou des outils propres à macOS doivent donc être dirigées vers un Mac compatible. En revanche, les contrôles de formatage, certains tests de logique et les étapes de préparation qui ne nécessitent pas l’écosystème Apple peuvent rester sur des nœuds Linux, si leurs outils et dépendances le permettent. Le fonctionnement des agents Buildkite et l’exécution des tâches décrit ce modèle d’exécution.

Établissez d’abord un inventaire par étape, et non par pipeline entier. Pour chacune, notez les commandes, les dépendances système, les fichiers produits, les secrets requis et les conditions de publication. Cette séparation évite deux erreurs coûteuses : envoyer au Mac des tâches qui n’en ont pas besoin, ou laisser une étape dépendante de Xcode dans une file qui ne peut pas l’exécuter.

Le transfert vers Mac ne résout pas automatiquement les autres contraintes. Il faut notamment considérer :

  • La compatibilité de l’outillage : une compilation réussie dépend de la version de macOS, de l’architecture de la machine et de la sélection effective de Xcode.
  • Le contexte du compte : un agent lancé par un service n’a pas nécessairement les mêmes accès qu’un utilisateur connecté. Les droits sur le dépôt, le répertoire de travail et le trousseau doivent être vérifiés dans ce contexte.
  • La persistance des secrets : un jeton d’agent, des identifiants de dépôt et du matériel de signature répondent à des besoins différents. Les placer dans un fichier de pipeline ou les afficher dans les journaux élargit leur exposition.
  • La disponibilité opérationnelle : un agent qui apparaît en ligne n’a pas encore prouvé qu’il peut extraire le code, sélectionner le bon outil, lancer les tests et conserver les résultats.

La documentation Apple sur la sélection des outils en ligne de commande de Xcode permet de vérifier comment le système choisit les outils actifs. L’équipe doit traduire cette sélection en contrôle reproductible dans le travail CI, plutôt que de déduire l’environnement depuis le nom de l’hôte.

Le tableau ci-dessous sert à décider où placer chaque type d’étape. Il ne remplace pas l’inventaire des dépendances du dépôt : une étape décrite comme générique peut quand même dépendre d’un outil présent uniquement sur un hôte particulier.

Type d’étape Environnement à privilégier Contrôle à effectuer
Contrôles sans dépendance Apple Nœud Linux existant si les outils requis y sont disponibles Vérifier les dépendances, les fichiers d’entrée et les sorties attendues
Compilation iOS avec xcodebuild Mac disposant de la version de Xcode requise Vérifier l’outil actif et le résultat de compilation
Tests liés à Xcode ou à un simulateur Apple Mac compatible avec les destinations et outils du projet Consigner la destination, les tests exécutés et les résultats
Archivage ou signature de publication Mac autorisé pour la tâche de publication Contrôler l’identité de signature, les permissions et l’approbation

Une architecture hybride est souvent le choix le plus simple à maintenir : elle réserve les ressources Mac aux tâches Apple et conserve ailleurs les contrôles réellement portables. Ce n’est toutefois pas une règle universelle. Si les étapes considérées comme génériques reposent sur des outils ou des scripts uniquement installés sur Mac, mesurez cette dépendance avant de les déplacer.

La préparation commence par une fiche de nœud. Indiquez le système macOS, l’architecture matérielle, les versions de Xcode disponibles, la personne ou l’équipe responsable des mises à jour et la méthode de restauration après incident. L’objectif est de savoir si un échec vient du pipeline, de l’agent ou d’une dérive de l’hôte.

Décidez ensuite quel compte macOS exécutera l’agent. Un compte de service contrôlé par l’entreprise facilite la continuité lorsque les membres de l’équipe changent. Accordez-lui les droits nécessaires, sans supposer qu’une session interactive et un service disposent des mêmes accès. Vérifiez concrètement :

  • l’écriture dans le répertoire de travail et la lecture des dépendances ;
  • l’accès aux outils Xcode et aux destinations de test attendues ;
  • l’accès au trousseau uniquement pour les tâches qui en ont besoin ;
  • les propriétaires des fichiers produits et les règles de nettoyage ;
  • la responsabilité de rotation des identifiants et de révocation des accès.

Distinguez les identifiants avant de les configurer. Le jeton d’agent permet à l’agent de s’authentifier auprès du service Buildkite ; les identifiants du dépôt permettent de récupérer le code ; les éléments de signature autorisent des opérations de publication. La documentation officielle sur les jetons Buildkite Agent précise le rôle de ces jetons. Elle ne justifie pas de réutiliser le même secret pour le dépôt ou la signature.

Conservez les secrets dans le mécanisme de gestion approuvé par l’entreprise. Évitez de les écrire dans le dépôt, de les intégrer à une commande journalisée ou de les exposer dans les sorties de diagnostic. Examinez les journaux avec la même attention que les scripts : une commande peut masquer la valeur à l’écran tout en la laissant dans une trace secondaire.

Si un Mac distant est envisagé, comparez les exigences de l’équipe aux éléments documentés pour l’offre retenue : mode d’accès, responsabilité des mises à jour, modalités de livraison et conditions de gestion des identifiants. Les offres Mac de NOVAKVM constituent un point de départ pour examiner les options disponibles ; vérifiez les caractéristiques et conditions publiées avant toute décision d’achat ou de location.

Suivez la procédure officielle correspondant à la méthode d’installation retenue. La documentation Buildkite pour installer un agent sur macOS est la référence pour les étapes propres à la plateforme. Ne copiez pas une ancienne commande d’installation dans un script interne sans la confronter à cette documentation et à la politique de sécurité de l’entreprise.

Procédez dans cet ordre :

  1. Préparez l’hôte : mettez à disposition le compte d’exécution, le répertoire de travail et les outils requis. Notez l’état initial de macOS et de Xcode.
  2. Installez l’agent : utilisez la méthode documentée retenue par l’équipe. N’introduisez pas le jeton dans un historique de terminal partagé.
  3. Configurez son identité : associez l’agent à l’environnement Buildkite prévu et vérifiez les paramètres sans publier de secrets dans les journaux.
  4. Lancez-le dans le contexte choisi : distinguez un lancement manuel depuis un terminal d’un service géré avec launchd. Un processus lancé à la main peut disparaître avec la session ou ne pas reprendre après un redémarrage.
  5. Contrôlez la reprise : vérifiez que le service redémarre selon la méthode configurée, que l’agent se reconnecte et qu’il accepte un travail de validation. La présence d’un processus ne prouve pas que l’agent peut exécuter une compilation.

Documentez qui peut redémarrer l’agent, qui met à jour macOS et Xcode, et comment revenir à un état fonctionnel. Cette responsabilité est importante sur un nœud partagé : une mise à jour faite sans coordination peut modifier l’outil actif ou interrompre les tâches d’autres équipes.

Définissez une file pour orienter les étapes vers les agents capables de les exécuter. Ajoutez aux étapes les critères qui correspondent aux capacités réellement vérifiées, puis faites un essai et lisez les journaux d’exécution. La gestion des files Buildkite décrit leur rôle dans l’affectation des travaux. Une étiquette ou un nom de file ne démontre pas qu’un agent possède une version donnée de Xcode, un compte particulier ou un hôte réservé.

Pour chaque étape macOS, vérifiez les éléments suivants dans les traces du travail :

  • l’agent qui a pris la tâche et l’hôte sur lequel elle s’exécute ;
  • le dépôt et la révision récupérés ;
  • les commandes invoquées, notamment celles qui lancent xcodebuild ;
  • le chemin et la version de l’outil sélectionné ;
  • les résultats de compilation, de test et de conservation des artefacts.

Dans le pipeline, gardez les étapes indépendantes d’Apple dans leur environnement actuel lorsque cela est pertinent. Faites dépendre les étapes iOS de la file Mac par des critères explicites, puis assurez-vous que les étapes suivantes attendent les bons résultats. La file indique où chercher un agent ; elle ne contrôle ni toutes les propriétés de l’hôte ni les permissions accordées à son processus.

Pour confirmer l’outil actif, exécutez les contrôles dans le travail lui-même. xcode-select -p indique le chemin des outils de développement sélectionnés ; xcodebuild -version consigne la version annoncée par la commande utilisée. Comparez ces sorties à l’exigence du projet. L’interface utilisée pour sélectionner les outils est décrite dans la référence Apple sur les réglages des outils en ligne de commande. Une vérification réalisée dans une session d’administration ne remplace pas celle effectuée par l’agent.

La décision de sécurité porte sur les droits effectifs, et non sur le seul nom de la file. Les tâches de test ordinaires, le code provenant d’une demande de modification non fiable et les publications signées en production ne doivent pas être traités comme s’ils avaient le même accès. Une file distincte peut améliorer le routage et la lisibilité, mais ne constitue pas à elle seule une isolation au niveau de l’hôte.

Évaluez chaque catégorie en fonction des dépôts accessibles, des secrets disponibles, du compte macOS et de la possibilité d’accéder au trousseau. Si une tâche non fiable peut être exécutée par le même compte et sur le même hôte qu’une tâche disposant de secrets de signature, la séparation des files ne suffit pas à établir une frontière de confiance. Il faut revoir les permissions et le dispositif d’exécution selon les politiques de l’entreprise.

Pour les tâches de production, définissez qui autorise la publication, comment les éléments de signature sont fournis, et quels journaux sont conservés. Les secrets ne doivent apparaître ni dans les sorties des scripts ni dans les artefacts téléchargeables. Répartissez explicitement les responsabilités entre l’équipe propriétaire du dépôt, l’équipe plateforme et les responsables de publication. La liste de contrôle de sécurité Buildkite aide à structurer cette revue, mais la conformité dépend des réglages et procédures réellement appliqués dans l’entreprise.

Appliquez un contrôle séparé avant d’ouvrir l’accès à des secrets de production. Examinez les permissions du dépôt, les conditions d’approbation et le contexte du compte qui exécute la tâche. Si ces contrôles ne peuvent pas être démontrés, limitez le travail aux tests sans signature de production et faites évoluer l’architecture avant d’autoriser la publication.

La validation doit suivre un projet représentatif, avec des dépendances, des tests et des sorties comparables à ceux du travail quotidien. Un agent en ligne ou une tâche qui démarre n’est pas une preuve de réussite. Faites exécuter la chaîne réelle et archivez les éléments qui permettent d’expliquer le résultat.

  1. Lancez une étape de contrôle du dépôt, puis vérifiez la révision et les sources extraites.
  2. Exécutez dans le travail les contrôles de sélection et de version de Xcode.
  3. Construisez le projet avec la commande réellement utilisée par la chaîne, par exemple xcodebuild si c’est l’outil choisi par le projet.
  4. Lancez les tests et examinez les résultats, y compris les échecs et les tests non exécutés.
  5. Vérifiez que les artefacts attendus sont conservés et accessibles aux étapes suivantes.
  6. Lorsque le scénario l’exige, validez l’archivage et la signature selon la procédure de publication, puis reliez l’approbation à la trace du travail.

Apple documente l’exécution des tests et l’interprétation de leurs résultats dans son guide consacré à l’exécution et à l’analyse des tests Xcode. Utilisez les résultats produits par le travail pour confirmer le comportement de la chaîne, plutôt que de vous fier à un code de sortie isolé. Consignez le résultat de test, la configuration utilisée et les artefacts associés.

À la réception, conservez une trace exploitable : état de l’agent, identité de l’hôte, compte d’exécution, informations sur les outils, résultat de compilation, résultat de test et approbation de publication lorsqu’elle s’applique. Ce dossier aide à distinguer une régression du projet d’une modification de Xcode ou d’une erreur de routage.

  • Si les étapes Apple sont minoritaires et que les nœuds Mac existants répondent aux besoins, gardez les tâches portables sur Linux et routez uniquement les étapes dépendantes de Xcode vers Mac.
  • Si les mises à jour d’outils doivent être contrôlées par l’équipe, choisissez un hôte dont la maintenance et la sélection de Xcode peuvent être documentées et vérifiées.
  • Si des tâches non fiables et des tâches de signature de production partagent le même compte ou le même hôte, ne considérez pas la file comme une mesure d’isolement ; modifiez les permissions ou séparez les environnements avant d’autoriser les secrets.
  • Si la capacité locale, l’accès physique ou une politique interne impose une machine sur site, conservez une infrastructure locale et documentez sa maintenance.
  • Si l’équipe a besoin d’un Mac distant temporaire ou d’une capacité à évaluer, examinez la location après avoir vérifié les modalités d’accès, d’exploitation et de sécurité ; ne présumez pas de ces conditions sans les confirmer.

Cette décision dépend aussi du profil de charge. Un Mac acheté en propre peut convenir à une capacité stable et à une équipe qui maîtrise son cycle de vie, mais immobilise un budget et laisse à l’entreprise la maintenance, le remplacement et l’exploitation. Un hôte distant peut éviter l’acquisition immédiate, mais impose de vérifier les accès réseau, la gestion des comptes et les modalités de support. La location n’est donc pas automatiquement préférable pour un travail soutenu ou soumis à des exigences d’accès physique.

Comment connecter le Buildkite Mac Agent à un projet iOS ?

Installez l’agent sur un Mac dont l’environnement est administré par l’équipe, puis associez-le à la file prévue. Routez vers cette file les étapes qui exigent réellement macOS ou Xcode. Dans le journal du travail, confirmez l’agent sélectionné, le dépôt extrait et les commandes exécutées ; ne déduisez pas les capacités du nœud de son seul nom.

Quel compte macOS choisir pour un agent auto-hébergé ?

Un compte de service géré par l’entreprise permet de définir plus clairement les droits et la responsabilité opérationnelle. Limitez ses accès aux dépôts, fichiers, outils et éléments de trousseau nécessaires. Vérifiez les autorisations depuis le processus de l’agent, y compris après redémarrage : un test effectué dans la session d’un administrateur peut donner un résultat différent.

Une file suffit-elle pour isoler la signature de production ?

Non. La file route des tâches ; elle ne garantit pas la séparation des comptes, des processus ou des secrets sur l’hôte. Pour une publication signée, évaluez séparément l’environnement d’exécution, les identités accessibles, les approbations et l’exposition des journaux. Si du code non fiable peut atteindre les mêmes ressources, renforcez l’isolation avant d’autoriser la signature.

Comment vérifier que xcodebuild utilise le bon Xcode ?

Ajoutez au travail des contrôles qui consignent le chemin sélectionné et la version annoncée, puis comparez-les à la configuration attendue du projet. Examinez aussi la commande xcodebuild réellement exécutée et les résultats des tests. Une vérification dans un terminal différent ne suffit pas, car l’agent peut tourner sous un autre compte ou avec une autre configuration.

Une chaîne Buildkite qui fonctionne sur un Mac local peut néanmoins dépendre d’un compte interactif, d’un accès direct à l’hôte ou d’un entretien manuel des outils. Ces contraintes compliquent la montée en capacité et la continuité des tâches. Un Mac distant en location peut être une option plus souple pour une capacité temporaire ou un environnement à évaluer ; avant de retenir NOVAKVM, confirmez les modalités d’accès, les responsabilités d’exploitation et les conditions proposées. Pour comparer les possibilités disponibles, consultez les options de Mac mini proposées par NOVAKVM. Pour une charge soutenue, une exigence d’accès physique ou des règles internes qui imposent un hôte dédié sur site, l’achat ou l’infrastructure locale peut rester plus approprié.

Donnez à vos builds iOS un Mac dédié

Avec NOVAKVM, exécutez vos compilations et tests sur un nœud Mac physique doté de ressources entièrement dédiées.

Choisissez la puissance adaptée à vos pipelines, jusqu’à 64 Go de mémoire unifiée et 2 To de stockage NVMe.

Voir les tarifs →