Matrice · Build pool 10 min de lecture

2026 — Mac distant mutualisé pour petites équipes : « image dorée », snapshots, retour arrière et dérive Xcode ou CLI (matrice décisionnelle)

M

Publié le 11 mai 2026

Équipe Meshmac

Mutualiser un Mac mini distant pour l’iOS CI impose de choisir entre image dorée et dérive Xcode ou CLI. Vous trouverez ici une matrice, une politique de snapshots, une fenêtre de rollback, le multi-Xcode, flock et l’isolation des droits pour pools MeshMac.

Croisez avec la FAQ collaboration, le guide SSH contre VNC et la page achat pour dimensionner capacité, gouvernance opérationnelle, supervision des accès distants et reporting d’incidents sur le long terme.

Pourquoi la dérive fragilise les tout petits pools mutualisés

  1. Mises à jour invisibles. xcode-select ou CLT : build vert sans mérite traçable dans Git.
  2. Rollback long. Sans snapshot : désinstallation manuelle et files iOS bloquées.
  3. Permissions. DerivedData ou Homebrew partagés : une lane écrase l’autre lorsque plusieurs fuseaux poussent.

Ligne de base de l’image dorée

Hôte figé entre baselines : build macOS, Xcode.app, CLT, shims Ruby ou Node listés dans le manifeste.

  • Snapshots : hebdo si actif, mensuel si faible churn, après patch critique.
  • BASELINE_ID : fichier sous /etc/meshmac ; chaque job l’affiche dans stdout.
  • Multi-Xcode : Xcode_15.4.app, Xcode_16.2.app avec checksum ; pas de glisser-déposer sans rehash.

« La baseline n’est pas un slogan : c’est la preuve que deux builds consécutifs observent le même monde système. »

Documentez DEVELOPER_DIR par couloir : défaut pour l’humain sur l’image dorée ; expérimentation = export explicite dans le job.

Versionnez le manifeste dans le même dépôt que les workflows : toute promotion de baseline passe par revue de code, tag sémantique et validation sur un nœud témoin avant d’atteindre le pool mutualisé.

Détection de la dérive

Sonde pré-build : comparez xcodebuild -version, swift --version, pkgutil … CLTools_Executables aux valeurs BASELINE_ID.

  • Fail-closed : abort + diff JSON si divergence.
  • Caches : ~/.cocoapods, ~/Library/Caches signalent souvent une install hors runbook.
  • Tags : Actions ou GitLab Runner alignés sur BASELINE_ID.

Visez moins de dix secondes wall-clock pour la sonde afin de rester transparent pour les développeurs tout en bloquant toute compilation lorsque la dérive surgit entre deux fenêtres de maintenance nocturne.

Matrice décisionnelle pour le pool de build

Retenez une stratégie dominante par classe de machine : mélanger snapshot-first et drift-tolerant sans étiquettes claires, c’est inviter la dérive à se dissimuler derrière des pipelines verts tout en épuasant l’astreinte.

Signal Couloir « snapshot d’abord » Couloir tolérant à la dérive
Release StoreKit, notarisation, App Store reproductible. Dogfood, bumps hebdo de toolchain.
Rollback Faible avec NVMe et drills documentés. Élevé : paquets et signatures à revalider.
Concurrence flock sur racines mutables ; un writer. Préfixes job, worktrees ; locks signing.
Ops Plus d’imagerie upfront, moins de surprises. Moins d’image, plus de triage.
Meshmac Slots BASELINE_ID annoncé. Préviews si fenêtre de dérive acceptée.

Alignez chaque colonne de la matrice sur l’offre publiée : les budgets financent explicitement soit la stabilité snapshot, soit la flexibilité drift-tolérante, ce qui clarifie l’achat de nœuds Meshmac lorsque la file dépasse la fenêtre de rollback contractuelle.

Exercice de retour arrière et fenêtre contractuelle

Fenêtre de rollback chiffrée : ex. prod restaure le snapshot sain sous 45 minutes après sonde en échec, sinon escalade.

  • Drill trimestriel : nœud hors ligne, restore snapshot, trois pipelines, chronomètre.
  • Gel : pas de baseline pendant la semaine drill sauf hotfix runbook.
  • Comms : chaque BASELINE_ID sur le canal des passations SSH/VNC.

Check-list de déploiement exécutable

  1. Politique snapshots : cadence, rétention, dérogations post-patch, critères d’invalidation.
  2. Multi-Xcode : Xcode_default.app documenté ; DEVELOPER_DIR dans le YAML.
  3. flock : pod install, notary, keychain → locks sous /var/run/meshmac.
  4. Isolation : comptes ou ACL sur DerivedData ; voir FAQ permissions.
  5. CI : échec + diff JSON + fil incident unique.
  6. SLA rollback : publié à côté du plan d’achat.

Trois repères pour revue de conception

  • 45 minutes de rollback restent réalistes avec NVMe et automation userdata.
  • Trois sondes couvrent l’essentiel : xcodebuild, swift, CLT pkgutil.
  • Deux writers CocoaPods sans flock ⇒ sandbox corrompue sur Mac partagé.

Foire aux questions

Même Xcode par défaut partout ?
Non : défaut humain oui ; CI impose DEVELOPER_DIR explicite par workflow.
Snapshots vs configuration ?
Complémentaires : snapshot reset disque ; Ansible ou scripts pour pare-feu, jetons, profils.
Où flock ?
/var/run/meshmac root-owned évite qu’un shell efface le bail d’une autre équipe.

En résumé

Snapshot d’abord ou dérive tolérée par lane ; sondes, flock, SLA minutes versionnés. Baseline annoncée = meilleure adéquation Meshmac.

Choisissez votre forfait et votre couloir de nœud

Forfaits, nœuds, SSH/VNC, FAQ.

Forfaits et nœuds