Guides techniques MangoVM

Que faire en cas d’espace disque insuffisant sur un CI Mac distant ? Guide de diagnostic 2026

Que faire en cas d’espace disque insuffisant sur un CI Mac distant ? Guide de diagnostic 2026

Dès la prochaine alerte, identifiez d’abord si l’espace est occupé par DerivedData, des simulateurs, des archives ou le répertoire de travail ; ne supprimez que les données que vous avez vérifiées comme recréables. Cette méthode convient aux compilations et aux archives qui échouent comme aux Runner macOS persistants dont le stockage diminue d’une tâche à l’autre.

Pour qui : développeurs iOS et macOS confrontés à une compilation ou une archive en échec sur un Mac distant.
Ingénieurs CI qui entretiennent un Runner autogéré et doivent éviter l’accumulation entre les tâches.
Équipes réduites qui doivent choisir entre nettoyer, modifier leur flux de travail ou augmenter la capacité de l’hôte.

Diagnostic immédiat des symptômes

Un message de stockage insuffisant est un indice, pas un diagnostic complet. Une tâche peut échouer pendant l’écriture des produits de compilation, au moment de créer une archive, ou parce qu’un processus n’arrive plus à enregistrer ses journaux. Une alerte de macOS, elle, peut signaler un volume presque plein sans identifier le fichier responsable. La première action est donc de conserver le journal complet et de relever l’étape exacte où le problème apparaît.

Notez le répertoire de travail, le volume utilisé par la tâche et l’état du stockage avant tout nettoyage. Sur l’hôte concerné, df -h / affiche l’espace disponible pour le volume racine ; du -sh peut aider à comparer la taille de répertoires identifiés. Les résultats dépendent du système de fichiers, des autorisations et du chemin interrogé : ils ne remplacent pas l’examen des fichiers de la tâche. Pour vérifier le stockage depuis l’interface macOS, suivez les indications d’Apple pour consulter l’espace utilisé sur un Mac.

Symptôme observé Première vérification Interprétation prudente
Échec pendant la compilation Espace du volume et chemin de travail Une écriture a échoué, mais le journal doit confirmer à quel endroit.
Échec à la création d’une archive Archives existantes, espace disponible et message complet Les archives et les données de compilation sont des éléments distincts.
Alerte de stockage récurrente Répertoires dont la taille augmente entre les tâches Une croissance répétée oriente vers un problème de rétention ou de nettoyage.
Un seul Runner échoue État de l’hôte et fichiers de cette tâche Une panne localisée ne prouve pas que le flux de travail entier est en cause.

Comparez une tâche en échec à une exécution réussie, si vous en avez une, et cherchez ce qui a changé : projet, cible, dépendances, volume utilisé ou conservation des sorties. Si le problème ne survient qu’après plusieurs tâches, examinez les résidus persistants. Si l’espace manque dès le début d’une tâche, contrôlez d’abord la capacité réellement disponible et les données préexistantes. Ne déduisez pas la cause d’un seul libellé d’erreur.

Localisation des répertoires réellement occupés

Les catégories affichées par macOS donnent une vue d’ensemble ; elles ne constituent pas une preuve qu’un dossier précis est supprimable. Mesurez les répertoires liés au travail du Runner, aux projets, aux données Xcode et aux journaux. Si vous ne pouvez pas lire un répertoire avec le compte utilisé, faites vérifier les autorisations au lieu d’interpréter une mesure incomplète comme une absence de données.

Xcode sépare notamment les données de développement des archives de projets. Les emplacements habituels documentés sont ~/Library/Developer/Xcode/DerivedData et ~/Library/Developer/Xcode/Archives. Les notes de version d’Apple décrivent l’emplacement des fichiers de compilation ; la documentation technique d’Apple sur les problèmes d’archivage aide à distinguer le diagnostic d’une archive de celui d’une compilation. Vérifiez toutefois le chemin réellement configuré sur votre hôte : un flux de travail peut écrire ailleurs.

Dans une situation de production, ajoutez à votre journal de tâche l’espace disponible au début et à la fin, ainsi que le chemin du répertoire de travail. Une différence entre ces mesures ne révèle pas à elle seule le dossier responsable, mais elle permet de repérer si la consommation apparaît pendant une tâche ou s’accumule entre deux exécutions. Pour examiner un dossier dont vous ne connaissez pas le contenu, listez-le et confrontez les fichiers à leur usage avant d’agir.

La présence de données dans un dossier de développement ne signifie pas qu’elles sont toutes temporaires. Des journaux peuvent être nécessaires pour comprendre un échec ; des sorties peuvent être attendues par une étape ultérieure ; certains fichiers peuvent être partagés entre tâches. À l’inverse, une ancienne sortie de compilation peut être recréable, mais uniquement si le pipeline sait effectivement la générer à nouveau. Établissez cette distinction à partir de votre configuration et de vos besoins de conservation.

Données Xcode et archives après une compilation

DerivedData contient des données associées au développement du projet, dont des éléments de compilation et des journaux. Les archives sont conservées séparément et peuvent être nécessaires à la distribution, à l’audit ou à une reprise de livraison. Supprimer tout le répertoire Xcode parce qu’une compilation manque d’espace confond ces usages et peut effacer des éléments utiles à l’équipe.

Élément à examiner Rôle à confirmer Décision avant nettoyage
DerivedData Données de projet, index, journaux et produits de compilation Confirmer le projet concerné et la possibilité de régénérer les éléments visés.
Archives Archives produites par Xcode Vérifier les exigences de conservation et la disponibilité d’une autre copie.
Journaux de tâche Diagnostic d’un échec ou preuve d’exécution Conserver ceux qui sont encore nécessaires à l’analyse ou au suivi.
Répertoire de travail Sources, dépendances et résultats intermédiaires du Runner Respecter les attentes du flux de travail et les fichiers qu’il transmet à l’étape suivante.

Avant une suppression, identifiez l’archive concernée, son utilité et l’endroit où une copie est conservée. Apple décrit les difficultés courantes d’archivage dans sa note technique sur la résolution des problèmes d’archives Xcode. Elle ne justifie pas de supprimer les archives comme remède général à un manque d’espace : le choix dépend de ce que vous devez livrer et conserver.

Si DerivedData semble être le principal occupant, commencez par vérifier si les projets qu’il contient sont encore utilisés et si une reconstruction propre est acceptable. N’effacez pas simultanément les données de projet, les archives et les journaux : en cas d’échec ultérieur, vous ne sauriez plus quelle action a changé le résultat. Une suppression ciblée, suivie d’une compilation représentative, vous donne une meilleure base pour décider si le nettoyage peut devenir une règle d’exploitation.

Pour vérifier le comportement attendu, utilisez les outils documentés par Apple plutôt qu’une suppression manuelle d’un dossier dont la fonction n’est pas claire. La documentation Apple sur la construction et l’exécution d’une app fournit le contexte du flux de compilation et de lancement. Le point à contrôler reste votre projet : la sélection de Xcode, la cible, les sorties attendues et les étapes qui réutilisent les fichiers.

Simulateurs et composants de développement

Un test avec simulateur peut laisser plusieurs catégories de données : composants nécessaires à l’exécution, données associées aux appareils simulés et produits générés par le projet. Examinez ces éléments séparément. Le fait qu’un simulateur ne soit pas lancé au moment de l’inspection ne démontre pas qu’il est inutilisé par le prochain lot de tests ou par une autre version de Xcode.

Dans Xcode, commencez par repérer les simulateurs et composants installés, puis comparez-les aux destinations réellement déclarées dans vos tâches. Apple documente l’ajout de simulateurs et le téléchargement de composants Xcode. Ces références aident à comprendre que les composants installés servent aux environnements de développement ; elles ne permettent pas de conclure qu’un composant précis peut être supprimé sans conséquence sur votre configuration.

Données de simulateur ou de développement Contrôle à effectuer Risque d’une suppression non vérifiée
Composant d’exécution du simulateur Vérifier les versions de Xcode et les destinations de test utilisées Un test peut ne plus trouver l’environnement demandé.
Données d’un appareil simulé Vérifier si des scénarios dépendent de son état ou de ses données Des données de test ou un état reproductible peuvent disparaître.
Produits du projet Vérifier s’ils sont encore nécessaires à la tâche ou à une étape suivante Une étape peut échouer si elle attend ces sorties.

Procédez par élément : relevez ce qui est installé, retirez uniquement ce dont l’équipe a confirmé qu’il n’est plus requis, puis relancez les tests sur la destination attendue. Enregistrez l’espace disponible avant et après chaque changement. Cette façon de faire n’empêche pas une erreur, mais elle permet d’identifier l’action qui l’a provoquée et de revenir sur une décision trop large.

Résidus des Runner autogérés

Un Runner hébergé par GitHub et un Runner autogéré ne confient pas la même responsabilité de stockage à votre équipe. La documentation de GitHub précise que le choix du Runner dépend du type d’exécution configuré pour la tâche : consultez les options de Runner pour un travail avant d’attribuer un résidu au bon environnement.

Sur un hôte autogéré persistant, les répertoires de travail, caches et outils peuvent subsister d’une exécution à l’autre, selon la configuration et le nettoyage du Runner. GitHub décrit les caractéristiques et la gestion des Runner autogérés. Vous devez donc décider vous-même quelles données conserver, combien de temps les journaux restent utiles et quelles sorties peuvent être recréées.

Ne traitez pas le répertoire de travail, le cache, les archives et les identifiants comme une seule catégorie. Un nettoyage trop large peut supprimer des sources nécessaires à une étape, effacer des preuves d’échec ou endommager une configuration d’accès. Si vos tâches s’exécutent dans des conteneurs personnalisés, examinez également leur cycle de vie : la documentation GitHub sur la personnalisation des conteneurs de Runner autogérés décrit les options à vérifier pour votre configuration.

Type d’environnement Responsabilité de stockage Action d’exploitation
Runner hébergé Dépend du modèle d’exécution choisi pour la tâche Vérifier les propriétés du Runner configuré et les sorties à conserver.
Runner autogéré persistant L’équipe administre l’hôte et ses résidus Définir un nettoyage ciblé, une mesure par tâche et une alerte de capacité.
Runner avec conteneurs personnalisés Dépend de l’intégration entre Runner et conteneur Vérifier où les fichiers sont écrits et quand le conteneur est supprimé.

Une politique raisonnable commence par la classification : ce qui est supprimable après validation d’une tâche, ce qui doit être conservé pour le diagnostic, ce qui est nécessaire à la livraison et ce qui relève des accès. N’automatisez la suppression qu’après avoir testé une exécution complète, y compris la récupération d’une archive ou d’un résultat conservé. Pour un environnement partagé, documentez le propriétaire de chaque catégorie plutôt que de laisser chaque projet imposer sa propre règle silencieuse.

Liste de contrôle et validation après nettoyage

Utilisez cette liste avant de transformer une opération ponctuelle en nettoyage automatique :

La validation doit couvrir le chemin qui a réellement échoué. Si l’incident concernait une archive, une simple compilation réussie ne suffit pas : vérifiez aussi la création et la conservation de l’archive attendue. Si le problème venait d’un test sur simulateur, vérifiez la destination et l’état de test nécessaires à votre projet. Comparez les journaux et les mesures d’espace avant et après ; une amélioration momentanée n’exclut pas une accumulation qui reprendra lors des tâches suivantes.

Les solutions ont des compromis différents. Un nettoyage ciblé est rapide, mais demande une bonne connaissance des fichiers et ne règle pas un volume durablement trop petit. Une politique de rétention préserve mieux les éléments utiles, mais nécessite de décider ce qui doit être conservé et de contrôler son application. Une capacité supérieure laisse davantage de marge, mais ne remplace pas le suivi des résidus ni la suppression de données inutiles. Choisissez à partir de la consommation observée par vos propres tâches, pas d’une estimation présentée comme universelle.

FAQ de diagnostic

Les questions les plus fréquentes portent sur la sécurité d’une suppression et sur la preuve que le pipeline a repris. Pour une suppression de données de simulateur, appliquez la même règle que pour DerivedData : vérifiez d’abord l’usage, réalisez une modification ciblée, puis testez le flux réel. Il faut pouvoir distinguer la restauration d’un espace disponible de la réparation effective de la tâche.

Un Runner autogéré demande une attention supplémentaire parce que le même hôte peut servir à plusieurs projets. Avant d’automatiser un nettoyage, attribuez les dossiers à leurs propriétaires et séparez les données de cache des identifiants, des archives et des journaux. Si une tâche échoue après la modification, la comparaison de mesures et de journaux vous aidera à déterminer si le nettoyage a touché un élément requis.

Choix de la suite pour votre CI Mac

Si une mesure ciblée libère de l’espace et que la compilation, les tests et l’archivage représentatifs réussissent ensuite, conservez le nettoyage sous une forme documentée et contrôlée. Si le problème revient parce que les sorties, les environnements de test ou plusieurs projets partagent un hôte persistant, revoyez la rétention et l’isolation des tâches avant de simplement agrandir le volume.

Un Runner déjà disponible peut éviter de gérer un Mac supplémentaire, mais vous gardez la responsabilité des résidus, de la capacité et des accès lorsqu’il est autogéré. Un Mac local offre un contrôle direct, mais mobilise votre matériel et doit rester disponible pendant les tâches. Si la charge reste élevée et que la capacité de votre hôte actuel ne correspond plus aux besoins mesurés, examinez d’abord votre configuration d’environnement de développement Mac distant, puis comparez-la à une option matérielle telle que Mac mini disponible à Singapour. Pour des compilations temporaires, des tests ponctuels ou un environnement distant à essayer avant de revoir votre infrastructure, la location d’un Mac avec MangoVM peut être plus adaptée qu’un achat immédiat ; pour une charge soutenue exigeant un accès physique ou une disponibilité garantie par votre propre équipe, un hôte dédié que vous administrez peut rester le meilleur choix.

Questions fréquentes

Comment diagnostiquer un manque d’espace pendant une compilation Xcode sur un Mac distant ?

Relevez le moment précis de l’échec, le répertoire de travail et le message complet, puis vérifiez l’espace disponible sur le volume réellement utilisé par la tâche. Comparez ensuite la taille de DerivedData, des archives, des données de simulateur et du répertoire de travail. Une erreur isolée ne suffit pas à attribuer la panne à un dossier précis.

Puis-je effacer DerivedData directement sur un Runner macOS ?

Pas sans vérifier ce qu’il contient et ce que votre pipeline attend. DerivedData regroupe des données de développement et de compilation, mais une partie peut être recréée alors que d’autres éléments peuvent aider à diagnostiquer un échec. Identifiez le projet concerné, conservez les journaux utiles et testez d’abord le nettoyage dans un contexte où une recompilation complète est acceptable.

Comment empêcher les caches de s’accumuler sur un Runner macOS autogéré ?

Traitez le Runner autogéré comme un hôte persistant : mesurez l’espace avant et après les tâches, définissez quels caches peuvent être supprimés et séparez-les des archives, des identifiants et des données de projet à conserver. N’effacez pas indistinctement tout le répertoire de travail. Ajustez la politique à la durée de conservation exigée et au coût d’une reconstruction.

Comment vérifier que Xcode fonctionne après le nettoyage de données de simulateur ?

Vérifiez d’abord que le simulateur supprimé n’est utilisé ni par la version de Xcode sélectionnée ni par les tests en cours. Exécutez ensuite un flux représentatif : compilation, lancement ou test sur la cible attendue, puis sauvegarde de l’archive si votre processus en produit une. Comparez l’espace disponible avant et après et confirmez qu’une tâche suivante peut démarrer.

Pour aller plus loin

Nœud physique dédié

Offrez à vos builds CI l’espace disque dont ils ont besoin

Avec MangoVM, utilisez un Mac mini physique dédié pour exécuter vos builds dans un environnement stable, sans partager ses ressources avec d’autres locataires.

Choisir une configuration et commander