GitHub Actions vs GitLab CI pour backend, web et mobile
Comparaison GitHub Actions vs GitLab CI pour monorepos : configuration des runners, gestion des secrets, caching et patterns pratiques pour backend, web et mobile.

Ce qui pose problĂšme dans le CI multi-applications
Quand un repo construit un backend, une application web et des apps mobiles, le CI nâest plus « juste exĂ©cuter des tests ». Il devient un gestionnaire de trafic pour des toolchains diffĂ©rentes, des temps de build diffĂ©rents et des rĂšgles de release diffĂ©rentes.
Le problÚme le plus courant est simple : une petite modification déclenche trop de travail. Une édition de docs lance la signature iOS, une retouche backend force une reconstruction complÚte du web, et soudain chaque merge paraßt lent et risqué.
Dans les setups multi-app, quelques problĂšmes apparaissent vite :
- Runner drift : les versions des SDK diffÚrent selon les machines, donc les builds se comportent différemment entre CI et local.
- Prolifération des secrets : clés API, certificats de signature et identifiants stores se retrouvent dupliqués entre jobs et environnements.
- Confusion des caches : la mauvaise clĂ© de cache crĂ©e des builds obsolĂštes, mais lâabsence de cache rend tout douloureusement lent.
- RÚgles de release mixtes : les backends veulent des déploiements fréquents, tandis que les mobiles sont verrouillés et nécessitent des vérifications supplémentaires.
- LisibilitĂ© du pipeline : la configuration devient un mur de jobs que personne nâa envie de toucher.
Câest pour ça que le choix entre GitHub Actions et GitLab CI pĂšse plus dans un monorepo que dans un projet mono-app. Il faut des façons claires de scinder le travail par chemin, de partager des artefacts en toute sĂ©curitĂ© et dâempĂȘcher que des jobs parallĂšles se marchent sur les pieds.
Une comparaison pratique se résume à quatre points : configuration et scalabilité des runners, stockage et périmÚtre des secrets, cache et artefacts, et la facilité à exprimer « ne construire que ce qui a changé » sans transformer le pipeline en soupe de rÚgles fragile.
Il sâagit de fiabilitĂ© et de maintenabilitĂ© au quotidien, pas de quel outil a le plus dâintĂ©grations ou la plus jolie interface. Ce guide ne remplace pas non plus les choix sur vos outils de build (Gradle, Xcode, Docker, etc.). Il aide Ă choisir le CI qui rend la structure propre plus facile Ă maintenir.
Comment GitHub Actions et GitLab CI sont structurés
La diffĂ©rence la plus visible est la façon dont chaque plateforme organise les pipelines et la rĂ©utilisation, et cela commence Ă compter dĂšs que backend, web et mobile partagent le mĂȘme repo.
GitHub Actions stocke lâautomatisation dans des fichiers YAML sous .github/workflows/. Les workflows se dĂ©clenchent sur des Ă©vĂ©nements comme push, pull request, schedule ou runs manuels. GitLab CI est centrĂ© autour de .gitlab-ci.yml Ă la racine du repo, avec des fichiers inclus optionnels, et les pipelines sâexĂ©cutent typiquement sur les pushes, merge requests, schedules et jobs manuels.
GitLab est construit autour de stages. Vous dĂ©finissez des stages (build, test, deploy), puis assignez des jobs Ă ces stages qui sâexĂ©cutent dans lâordre. GitHub Actions est structurĂ© autour de workflows contenant des jobs. Les jobs sâexĂ©cutent en parallĂšle par dĂ©faut, et vous dĂ©finissez des dĂ©pendances quand quelque chose doit attendre.
Pour exĂ©cuter la mĂȘme logique sur plusieurs cibles, les matrices de GitHub sont naturelles (iOS vs Android, plusieurs versions de Node). GitLab peut faire un fan-out similaire avec des jobs parallĂšles et des variables, mais il faut souvent relier plus de piĂšces soiâmĂȘme.
La rĂ©utilisation diffĂšre aussi. Dans GitHub, les Ă©quipes sâappuient souvent sur des reusable workflows et des composite actions. Dans GitLab, la rĂ©utilisation vient gĂ©nĂ©ralement de include, de templates partagĂ©s et dâancres/extends YAML.
Les approbations et les environnements protĂ©gĂ©s sont aussi diffĂ©rents. GitHub utilise souvent des environnements protĂ©gĂ©s avec reviewers requis et des secrets dâenvironnement pour faire patienter un dĂ©ploiement de production. GitLab combine habituellement branches/tags protĂ©gĂ©s, environnements protĂ©gĂ©s et jobs manuels pour que seuls certains rĂŽles puissent lancer un dĂ©ploiement.
Configuration des runners et exécution des jobs
La configuration des runners est lĂ oĂč les deux plateformes commencent Ă se diffĂ©rencier au quotidien. Les deux peuvent utiliser des runners hĂ©bergĂ©s (machine gĂ©rĂ©e par la plateforme) ou des runners self-hosted (vous gĂ©rez la machine, les mises Ă jour et la sĂ©curitĂ©). Les runners hĂ©bergĂ©s sont plus simples pour dĂ©marrer ; les self-hosted sont souvent nĂ©cessaires pour la vitesse, des outils spĂ©ciaux ou lâaccĂšs Ă des rĂ©seaux privĂ©s.
Une sĂ©paration pratique dans beaucoup dâĂ©quipes : runners Linux pour backend et web, macOS uniquement quand il faut construire iOS. Android peut tourner sur Linux, mais câest lourd, donc la taille du runner et lâespace disque comptent.
Hébergé vs self-hosted : ce que vous gérez
Les runners hĂ©bergĂ©s conviennent quand vous voulez une configuration prĂ©visible sans maintenance. Les self-hosted sont pertinents quand vous avez besoin de versions Java/Xcode spĂ©cifiques, de caches plus rapides ou dâaccĂšs rĂ©seau interne.
Si vous optez pour du self-hosted, dĂ©finissez les rĂŽles des runners tĂŽt. La plupart des repos sâen sortent bien avec un petit set : un runner Linux gĂ©nĂ©ral pour backend/web, un runner Linux plus puissant pour Android, un runner macOS pour packaging et signature iOS, et un runner sĂ©parĂ© pour les dĂ©ploiements avec permissions strictes.
Choisir le bon runner par job
Les deux systĂšmes permettent de cibler des runners (labels dans GitHub, tags dans GitLab). Nommez-les selon les charges : linux-docker, android, ou macos-xcode15 par exemple.
Lâisolation est Ă lâorigine de nombreux builds fragiles. Fichiers rĂ©siduels, caches partagĂ©s corrompus ou outils installĂ©s « Ă la main » sur une machine self-hosted peuvent crĂ©er des Ă©checs alĂ©atoires. Des workspaces propres, des versions dâoutils figĂ©es et un nettoyage programmĂ© des runners rapportent vite.
La capacitĂ© et les permissions sont dâautres points rĂ©currents, surtout avec la disponibilitĂ© et le coĂ»t de macOS. Une rĂšgle simple : les runners de build construisent, les runners de dĂ©ploiement dĂ©ploient, et les credentials de production vivent dans le plus petit ensemble possible de jobs.
Secrets et variables dâenvironnement
Les secrets sont un point dĂ©licat dans les pipelines multi-app. Les fondamentaux sont similaires (stocker les secrets sur la plateforme, les injecter Ă lâexĂ©cution), mais le pĂ©rimĂštre diffĂšre.
GitHub Actions scope gĂ©nĂ©ralement les secrets au niveau du repository et de lâorganisation, avec une couche supplĂ©mentaire dâEnvironments. Cette couche est utile quand la prod a besoin dâun gate manuel et dâun jeu de valeurs distinct de la staging.
GitLab CI utilise des variables CI/CD au niveau du projet, du groupe ou de lâinstance. Il prend aussi en charge des variables scoping par environnement, plus des protections comme protected (uniquement disponibles sur branches/tags protĂ©gĂ©s) et masked (cachĂ©es dans les logs). Ces contrĂŽles sont utiles quand un monorepo sert plusieurs Ă©quipes.
Le mode dâĂ©chec principal est lâexposition accidentelle : sortie de debug, une commande Ă©chouĂ©e qui echo des variables, ou un artefact incluant un fichier de config. ConsidĂ©rez logs et artefacts comme partageables par dĂ©faut.
Dans les pipelines backend + web + mobile, les secrets comprennent typiquement des credentials cloud, des URLs de bases de donnĂ©es et clĂ©s API tierces, du matĂ©riel de signature (certificats/profiles iOS, keystore Android et mots de passe), des tokens de registry (npm, Maven, CocoaPods) et des tokens dâautomatisation (email/SMS, chat bots).
Pour plusieurs environnements (dev, staging, prod), gardez des noms cohĂ©rents et swappez les valeurs via le pĂ©rimĂštre dâenvironnement plutĂŽt quâen copiant des jobs. Ăa facilite la rotation et le contrĂŽle dâaccĂšs.
Quelques rĂšgles empĂȘchent la plupart des incidents :
- PrĂ©fĂ©rez des credentials courtâterme (par ex. OIDC vers les cloud providers quand disponible) plutĂŽt que des clĂ©s longue durĂ©e.
- Appliquez le principe du moindre privilÚge : identités de déploiement séparées pour backend, web et mobile.
- Masquez les secrets et Ă©vitez dâimprimer les variables dâenvironnement, mĂȘme en cas dâerreur.
- Restreignez les secrets de production aux branches/tags protégés et aux approbations nécessaires.
- Ne stockez jamais de secrets dans des artefacts, mĂȘme temporairement.
Un exemple simple et Ă fort impact : les jobs mobiles ne doivent recevoir les secrets de signature que sur des releases taguĂ©es, tandis que les jobs de dĂ©ploiement backend peuvent utiliser un deploy token limitĂ© sur les merges vers main. Ce changement rĂ©duit fortement la surface dâexposition en cas de mauvaise configuration.
Caching et artefacts pour accélérer les builds
La plupart des pipelines lents le sont pour une raison ennuyeuse : ils retĂ©lĂ©chargent et reconstruisent sans cesse les mĂȘmes choses. Le cache Ă©vite le travail rĂ©pĂ©tĂ©. Les artefacts rĂ©solvent un autre problĂšme : conserver lâoutput exact dâun run spĂ©cifique.
Ce quâil faut cacher dĂ©pend de ce que vous construisez. Les backends profitent des caches de dĂ©pendances et du cache de compilation (par exemple le module cache Go). Les builds web profitent du cache des gestionnaires de paquets et des outils de build. Les builds mobiles ont souvent besoin du cache Gradle et de lâAndroid SDK sous Linux, et des caches CocoaPods ou Swift Package Manager sur macOS. Prudence avec le caching agressif des outputs iOS (comme DerivedData) Ă moins de maĂźtriser les compromis.
Les deux plateformes suivent le mĂȘme schĂ©ma basique : restaurer le cache au dĂ©but dâun job, sauvegarder le cache mis Ă jour Ă la fin. La diffĂ©rence du quotidien tient au contrĂŽle. GitLab rend le comportement des cache et artefacts explicite dans un fichier, incluant lâexpiration. GitHub Actions sâappuie souvent sur des actions sĂ©parĂ©es pour le caching â flexible mais plus facile Ă mal configurer.
Les clĂ©s de cache comptent dâautant plus dans un monorepo. De bonnes clĂ©s Ă©voluent quand les inputs changent et restent stables sinon. Les lockfiles (go.sum, pnpm-lock.yaml, yarn.lock, etc.) doivent piloter la clĂ©. Il est aussi utile dâinclure un hash du dossier spĂ©cifique de lâapplication que vous construisez au lieu du repo entier, et de garder des caches sĂ©parĂ©s par application pour quâun changement nâinvalide pas tout.
Utilisez des artefacts pour les livrables que vous voulez garder : bundles de release, APK/IPA, rapports de tests, fichiers de couverture et métadonnées de build. Les caches accélÚrent ; les artefacts conservent un enregistrement.
Si les builds restent lents, vérifiez les caches surdimensionnés, des clés qui changent à chaque run (timestamps, SHAs complets) et des outputs mis en cache non réutilisables entre runners.
Adaptation au monorepo : plusieurs pipelines sans chaos
Un monorepo devient dĂ©sordonnĂ© quand chaque push dĂ©clenche tests backend, builds web et signatures mobiles, mĂȘme si on nâa modifiĂ© quâun README. Le bon pattern : dĂ©tecter ce qui a changĂ© et nâexĂ©cuter que les jobs pertinents.
Dans GitHub Actions, cela signifie souvent des workflows sĂ©parĂ©s par application avec des filtres de chemins (path filters) pour que chaque workflow ne sâexĂ©cute que si des fichiers dans sa zone ont changĂ©. Dans GitLab CI, on utilise rules:changes (ou des child pipelines) pour crĂ©er ou ignorer des groupes de jobs selon les chemins.
Les packages partagĂ©s sont le point oĂč la confiance casse. Si packages/auth change, backend et web peuvent devoir ĂȘtre reconstruits mĂȘme si leurs dossiers nâont pas changĂ©. Traitez les chemins partagĂ©s comme des dĂ©clencheurs pour plusieurs pipelines et maintenez des frontiĂšres de dĂ©pendance claires.
Une carte de déclenchement simple pour limiter les surprises :
- Les jobs backend sâexĂ©cutent sur changements dans
backend/**oupackages/**. - Les jobs web sâexĂ©cutent sur changements dans
web/**oupackages/**. - Les jobs mobile sâexĂ©cutent sur changements dans
mobile/**oupackages/**. - Les changements docs déclenchent des vérifications rapides (formatage, vérif orthographique).
ParallĂ©lisez ce qui est sĂ»r (tests unitaires, lint, build web). SĂ©rialisez ce qui doit ĂȘtre contrĂŽlĂ© (dĂ©ploiements, releases stores). Les deux plateformes offrent des mĂ©canismes (needs sur GitLab, dĂ©pendances de jobs sur GitHub) pour exĂ©cuter des checks rapides tĂŽt et arrĂȘter le pipeline en cas dâĂ©chec.
Isolez la signature mobile du CI quotidien. Placez les clés de signature dans un environnement dédié avec approbation manuelle, et lancez la signature seulement sur des tags de release ou une branche protégée. Les pull requests peuvent toujours produire des apps non signées pour validation sans exposer les credentials sensibles.
Ătape par Ă©tape : un pipeline propre pour backend, web et mobile
Un pipeline multi-app lisible commence par un nommage clair. Choisissez un schĂ©ma et tenezâvous y pour que lâon puisse parcourir les logs et savoir ce qui a tournĂ©.
Un schéma lisible :
- Pipelines :
pr-checks,main-build,release - Environnements :
dev,staging,prod - Artefacts :
backend-api,web-bundle,mobile-debug,mobile-release
Ensuite, gardez les jobs petits et ne promouvez que ce qui a réussi aux étapes précédentes :
-
PR checks (chaque pull request) : exécutez des tests rapides et le lint seulement pour les apps qui ont changé. Pour le backend, construisez un artefact déployable (image container ou bundle serveur) et conservez-le pour que les étapes suivantes ne le reconstruisent pas.
-
Web build (PR + main) : construisez le web en bundle statique. Sur PR, conservez la sortie comme artefact (ou déployez dans un environnement preview si vous en avez un). Sur main, produisez un bundle versionné pour
devoustaging. -
Mobile debug builds (PR uniquement) : construisez un APK/IPA debug. Ne signez pas pour la release. Lâobjectif est un retour rapide et un fichier installable pour les testeurs.
-
Release builds (tags uniquement) : quand un tag comme
v1.4.0est poussĂ©, exĂ©cutez les builds complets backend et web plus les builds mobiles signĂ©s. GĂ©nĂ©rez des outputs prĂȘts pour les stores et conservez les notes de release avec les artefacts. -
Approbations manuelles : placez les approbations entre
stagingetprod, pas avant les tests de base. Les devs peuvent déclencher des builds, mais seuls les rÎles approuvés doivent déployer en production et accéder aux secrets de prod.
Erreurs courantes qui font perdre du temps
Les Ă©quipes perdent souvent des semaines Ă cause dâhabitudes de workflow qui crĂ©ent des builds fragiles.
Un piĂšge est lâusage excessif de runners partagĂ©s. Quand de nombreux projets se disputent la mĂȘme pool, vous obtenez des timeouts alĂ©atoires, des jobs lents et des builds mobiles qui Ă©chouent uniquement aux heures de pointe. Si backend, web et mobile comptent, isolez les jobs lourds sur des runners dĂ©diĂ©s (ou au moins des queues sĂ©parĂ©es) et dĂ©finissez des limites de ressources explicites.
Les secrets sont un autre gouffre temporel. Les clĂ©s de signature mobile sont faciles Ă mal gĂ©rer. Erreur courante : les stocker trop largement (disponibles pour chaque branche et job) ou les divulguer via des logs verbeux. Restreignez le matĂ©riel de signature aux branches/tags protĂ©gĂ©s et Ă©vitez toute Ă©tape qui imprime des valeurs secrĂštes (mĂȘme encodĂ©es en base64).
Le caching peut se retourner contre vous si vous mettez en cache dâĂ©normes rĂ©pertoires ou confondez caches et artefacts. Cachez seulement des inputs stables. Conservez les outputs nĂ©cessaires comme artefacts.
Enfin, dans les monorepos, dĂ©clencher chaque pipeline sur chaque changement brĂ»le des minutes et la patience. Si quelquâun touche un README et que vous reconstruisez iOS, Android, backend et web, les gens cessent de faire confiance au CI.
Checklist rapide :
- Utilisez des rÚgles basées sur les chemins pour que seuls les apps affectés tournent.
- Séparez jobs de test et jobs de déploiement.
- Restreignez les clés de signature aux workflows de release.
- Cachez des inputs petits et stables, pas des dossiers de build entiers.
- Prévoyez une capacité runner prévisible pour les builds mobiles lourds.
Vérifications rapides avant de vous engager sur une plateforme
Avant de choisir, faites quelques vérifications qui reflÚtent votre façon de travailler. Elles vous évitent de choisir un outil qui semble OK pour une app mais pénible quand vous ajoutez du mobile, des environnements multiples et des releases.
Concentrez-vous sur :
- Plan de runners : hébergés, self-hosted ou mix. Les builds mobiles poussent souvent vers un mix à cause de macOS.
- Plan de secrets : oĂč vivent les secrets, qui peut les lire et comment se font les rotations. La prod doit ĂȘtre plus verrouillĂ©e que la staging.
- Plan de cache : ce que vous cachez, oĂč câest stockĂ© et comment les clĂ©s sont formĂ©es. Si la clĂ© change Ă chaque commit, vous payez sans gagner en vitesse.
- Plan monorepo : filtres de chemins et moyen propre de partager des étapes communes (lint, tests) sans copier-coller.
- Plan de release : tags, approbations et séparation des environnements. Définissez qui peut promouvoir en prod et quelle preuve est requise.
Testez ces rĂ©ponses sur un petit scĂ©nario. Dans un monorepo avec un backend Go, une app Vue et deux apps mobiles : un changement docs devrait presque rien faire ; un changement backend devrait lancer tests backend et construire un artefact API ; un changement UI mobile devrait ne construire quâAndroid et iOS.
Si vous ne pouvez pas dĂ©crire ce flux sur une page (dĂ©clencheurs, caches, secrets, approbations), faites un pilote dâune semaine sur les deux plateformes avec le mĂȘme repo. Choisissez celle qui vous paraĂźt ennuyeuse et prĂ©visible.
Exemple : un flow réaliste de build et release pour un monorepo
Imaginez un repo avec trois dossiers : backend/ (Go), web/ (Vue) et mobile/ (iOS et Android).
Au quotidien, vous voulez un feedback rapide. Pour les releases, vous voulez des builds complets, la signature et les étapes de publication.
Une séparation pratique :
- Branches feature : exécuter lint + unit tests pour les parties modifiées, construire backend et web, et éventuellement lancer un build Android debug. Ignorer iOS sauf si vraiment nécessaire.
- Tags de release : tout exécuter, créer des artefacts versionnés, signer les apps mobiles et pousser images/binaires vers votre stockage de release.
Le choix des runners Ă©volue quand le mobile entre en jeu. Les builds Go et Vue aiment Linux. iOS exige macOS, ce qui peut influencer la dĂ©cision plus que tout. Si lâĂ©quipe veut un contrĂŽle total des machines, GitLab CI avec runners self-hosted peut ĂȘtre plus facile Ă gĂ©rer en flotte. Si vous prĂ©fĂ©rez moins dâopĂ©rations et une mise en place rapide, les runners hĂ©bergĂ©s GitHub sont pratiques, mais les minutes macOS et la disponibilitĂ© deviennent des Ă©lĂ©ments Ă planifier.
Le caching est lĂ oĂč vous gagnez vraiment du temps, mais le meilleur cache dĂ©pend de lâapp : pour Go, cachez les modules et le build cache ; pour Vue, le store du package manager et rebuild uniquement quand les lockfiles changent ; pour mobile, cachez Gradle et lâAndroid SDK sur Linux, cachez CocoaPods ou SPM sur macOS â attendez-vous Ă des caches plus gros et plus dâinvalidation.
Une rÚgle de décision solide : si votre code est déjà hébergé sur une plateforme, commencez par là . Changez seulement si les runners (notamment macOS), les permissions ou la conformité vous y obligent.
Prochaines étapes : choisir, standardiser et automatiser en sécurité
Choisissez lâoutil qui correspond Ă lâendroit oĂč votre code et vos Ă©quipes sont dĂ©jĂ . La diffĂ©rence se voit surtout dans la friction quotidienne : revues, permissions et la rapiditĂ© pour diagnostiquer un build cassĂ©.
Commencez simple : un pipeline par app (backend, web, mobile). Une fois stable, extrayez les étapes partagées dans des templates réutilisables pour réduire le copier-coller sans diluer la responsabilité.
Notez le pĂ©rimĂštre des secrets comme vous noteriez qui a les clĂ©s dâun bureau. Les secrets de production ne doivent pas ĂȘtre lisibles par chaque branche. Programmez une rotation (trimestrielle vaut mieux que jamais), et convenez dâun processus dâinvalidation dâurgence.
Si vous utilisez un générateur no-code qui produit du code réel, traitez la génération comme une étape CI à part entiÚre. Par exemple, AppMaster (appmaster.io) génÚre des backends Go, des apps Vue3 et des apps mobiles Kotlin/SwiftUI : votre pipeline peut régénérer le code quand il change, puis ne construire que les cibles affectées.
Quand votre Ă©quipe fait confiance au flow, faites-en la valeur par dĂ©faut pour les nouveaux repos et gardez-le ennuyeux : dĂ©clencheurs clairs, runners prĂ©visibles, secrets serrĂ©s et releases qui ne sâexĂ©cutent que quand vous le voulez.
FAQ
Par dĂ©faut, choisissez la plateforme oĂč votre code et votre Ă©quipe sont dĂ©jĂ . Ne changez que si les runners (en particulier macOS), les permissions ou la conformitĂ© vous y obligent. Le coĂ»t quotidien vient surtout de la disponibilitĂ© des runners, du paramĂ©trage des secrets et de la facilitĂ© Ă exprimer « ne construire que ce qui a changĂ© » sans rules fragiles.
GitHub Actions paraĂźt souvent plus simple pour un dĂ©marrage rapide et pour les builds en matrice, avec des workflows rĂ©partis en plusieurs fichiers YAML. GitLab CI est plus centralisĂ© et basĂ© sur des stages, ce qui peut ĂȘtre plus facile Ă raisonner quand le pipeline grossit et que vous voulez un seul endroit pour contrĂŽler caches, artefacts et ordre des jobs.
ConsidĂ©rez macOS comme une ressource rare : ne lâutilisez que pour lâempaquetage ou la signature iOS. Baseline courant : runners Linux pour backend et web, un runner Linux plus puissant pour Android, et un runner macOS rĂ©servĂ© aux jobs iOS, plus un runner de dĂ©ploiement avec permissions restreintes.
Le « runner drift » survient quand le mĂȘme job se comporte diffĂ©remment Ă cause de versions SDK/outils divergentes. Corrigez-le en fixant les versions dâoutils, en Ă©vitant les installations manuelles sur les runners self-hosted, en utilisant des espaces de travail propres et en nettoyant ou reconstruisant pĂ©riodiquement les images des runners.
Rendez les secrets disponibles uniquement aux jobs qui en ont besoin, et protégez les secrets de production derriÚre des branches/tags protégés et des approbations. Pour le mobile, injectez le matériel de signature seulement pour les releases taguées ; les pull requests doivent produire des builds debug non signés pour validation.
Les caches accĂ©lĂšrent le travail rĂ©pĂ©tĂ©, les artefacts conservent lâoutput exact dâun run. Le cache est un accĂ©lĂ©rateur best-effort qui peut ĂȘtre remplacĂ© ; un artefact est un livrable Ă conserver (bundle de release, APK/IPA, rapports de tests, etc.).
Basez les clĂ©s de cache sur des inputs stables comme les lockfiles, et scopez-les Ă la partie du repo que vous construisez pour Ă©viter que des changements non liĂ©s invalidant tout. Ăvitez les clĂ©s qui changent Ă chaque run (horodatages, SHA complet) et maintenez des caches sĂ©parĂ©s par application.
Utilisez des rĂšgles basĂ©es sur les chemins pour que la documentation ou des dossiers non liĂ©s nâactivent pas des jobs coĂ»teux. Traitez les dossiers partagĂ©s comme des dĂ©clencheurs explicites pour les cibles qui en dĂ©pendent afin que les reconstructions multiples soient volontaires et prĂ©visibles.
Garder les clés de signature et les identifiants magasins hors des runs quotidiens en les bloquant derriÚre des tags, des branches protégées et des approbations. Pour les PR, générez des variantes debug non signées pour un retour rapide sans exposer des secrets sensibles.
Oui â faites de la gĂ©nĂ©ration une Ă©tape Ă part avec entrĂ©es et sorties claires pour pouvoir la cacher et la relancer de façon prĂ©visible. Si vous utilisez AppMaster (appmaster.io) qui gĂ©nĂšre du code rĂ©el, rĂ©gĂ©nĂ©rez sur les changements pertinents puis ne construisez que les cibles affectĂ©es (backend, web, mobile).


