dependencyResolutionManagement, --parallel et mémoire daemon bornés, plus des clés de cache liées au dépôt Git et au JDK. Livrable : goulots, matrice, modèle settings.gradle.kts, workers, invalidation, cinq étapes, repères, FAQ. Les décisions ici s'alignent sur une politique d'artefacts unique pour iOS, Android et services backend. Chaîne mobile : CocoaPods, SPM ; sans compte : accueil, blog, tarifs.
Portrait des goulots d'étranglement transfrontaliers
Git et registre en Europe, runner Apple Silicon ailleurs : le TLS domine la durée. Chaque SNAPSHOT hors edge cache rouvre le WAN malgré le cache module Gradle.
repositories dispersés dans build.gradle.kts cassent l'audit ; « un barème unique » dans settings.gradle.kts impose la politique.GRADLE_USER_HOME sur volume réseau partagé provoque verrous ; utilisez un dossier local par CI_JOB_ID.Matrice décisionnelle : miroir, parallélisme et cache build
| Critère | Stratégie « miroir strict » | Stratégie « hybride maîtrisé » | Signal de choix |
|---|---|---|---|
| Ordre des dépôts | Un seul endpoint proxy qui agrège Central, Google et JitPack. | Proxy interne puis Central explicite en repli filtré. | Exigence Zero Trust sur la sortie ⇒ miroir strict. |
| Parallélisme Gradle | org.gradle.parallel=true avec workers.max=2 sur hôte partagé. |
Même drapeau mais workers.max=4 si RAM ≥ 36 Go et un seul job lourd. |
Surveillez les pics CodeCache du daemon avant d'augmenter. |
| Cache build | Cache HTTP local + push vers serveur interne avec clé figée par branche release. | Cache local uniquement ; push distant réservé aux branches stables. | Équipes distribuées ⇒ push contrôlé ; PR éphémères ⇒ local. |
| Transport | Timeouts HTTP élevés (120 s) et trois tentatives backoff 2 · 4 · 8 s. | Timeouts modérés (60 s) derrière relais SSH stable. | Si vous utilisez un relais SSH, réduisez les workers pour garder de la marge TCP. |
Modèle settings.gradle.kts : chaîne de miroirs et mode FAIL_ON_PROJECT_REPOS
Proxy interne d'abord, sources publiques ensuite ; FAIL_ON_PROJECT_REPOS supprime les dépôts orphelins et sécurise audit + cache build.
// settings.gradle.kts — esquisse de chaîne miroir
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven {
name = "corpMirror"
url = uri("https://nexus.example.com/repository/maven-public/")
content {
includeGroupByRegex("com\\.entreprise\\..*")
includeGroupByRegex("org\\.jetbrains\\..*")
}
}
mavenCentral()
google()
}
}
gradle.properties : org.gradle.caching=true, org.gradle.parallel=true, org.gradle.configureondemand=true si pertinent, org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 sur Mac M4 partagé (ajuster après métriques).
Parallélisme, workers et seuil mémoire du daemon
--parallel + org.gradle.workers.max doivent refléter la RAM louée, pas la fiche CPU ; réservez de la marge pour OS, Kotlin daemon, tests et VNC. Isolez export GRADLE_USER_HOME="${WORKSPACE}/.gradle-${CI_JOB_ID}", évitez NFS, contrôlez ./gradlew --status en fin de job.
Clés de cache distant, préfixes et invalidation prudente
Caches Gradle Enterprise ou HTTP dérivent la clé ; ajoutez ci-mac-${REGION}-${REPO} pour éviter le partage accidentel entre produits.
Repères pour la revue plateforme
- 40–60 % de gain médian possible sur modules Kotlin/Android stables avec cache distant bien peuplé.
- Deux workers lourds ≈ 12–18 Go RAM utiles ; confirmez via
jstatou métriques runner. - 3–4 tentatives, backoff 2 · 4 · 8 s, pour TLS transitoire sans masquer une mauvaise auth.
Release : incluez hash de lock ou métadonnées ; branches courtes : préfixe dépôt seulement.
Échecs réseau, retries et cohérence des lockfiles
Script wrapper : séparer erreurs réseau et compilation ; évitez --refresh-dependencies systématique. Dependency locking sur modules critiques ; dependencies --write-locks seulement sur merges autorisés. Après retry, ./gradlew -q build --dry-run ou contrôle des sommes. Documentez les timeouts HTTP côté miroir, par exemple cent vingt secondes sur liaisons interrégionales. Même runbook que CocoaPods/SPM pour l'astreinte.
Cinq étapes pour industrialiser le profil Gradle Mac CI
1 Latence miroir + refus si < 25 Go libres cache. 2 FAIL_ON_PROJECT_REPOS et suppression des repositories redondants. 3 Versionner GRADLE_USER_HOME, parallel, workers.max, jvmargs. 4 Cache build avec préfixe région ; isoler release vs PR. 5 Porte CI : lockfile attendu + métriques hit avant promotion.
FAQ : 401, certificate pinning et mélange de dépôts privés
401 : NTP, TTL jeton, pas de double auth conflictuelle sur le proxy. Pinning : truststore job, pas de désactivation TLS. Privé + public : blocs content pour éviter résolution erronée depuis Central. Daemon : baissez workers.max ou scindez modules lourds. Détail dans le JSON-LD FAQPage.
Synthèse et prochaines lectures sans compte
Résumé : settings centralisé, parallélisme borné, cache NVMe, clés explicites stabilisent Gradle sur Mac distant et clarifient l'audit sécurité des dépôts. Cela réduit aussi les tickets réseau répétitifs et coûteux. Tarifs, achat, aide (SSH) ; relais SSH pour le transport hors Gradle.