12 août 2025·8 min de lecture

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.

GitHub Actions vs GitLab CI 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

Prototype without CI chaos
Get a production-ready structure early, so your CI rules stay simple as you grow.
Build a Prototype

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/** ou packages/**.
  • Les jobs web s’exĂ©cutent sur changements dans web/** ou packages/**.
  • Les jobs mobile s’exĂ©cutent sur changements dans mobile/** ou packages/**.
  • 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

Launch an internal app
Create admin panels and portals that your team can iterate on without constant CI rewrites.
Build Internal Tool

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 :

  1. 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.

  2. 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 dev ou staging.

  3. 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.

  4. Release builds (tags uniquement) : quand un tag comme v1.4.0 est 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.

  5. Approbations manuelles : placez les approbations entre staging et prod, 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

Deploy where you need
Deploy to AppMaster Cloud or your own cloud when your pipeline is green.
Deploy Now

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

Generate real source code
Generate Go, Vue3, and native mobile code you can test and release in your pipeline.
Start Building

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

Dois-je choisir GitHub Actions ou GitLab CI pour un monorepo avec backend, web et mobile ?

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.

Quelle est la différence la plus pratique entre la structure de GitHub Actions et celle de GitLab CI ?

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.

Comment planifier les runners quand des builds iOS sont impliqués ?

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.

Comment Ă©viter le “runner drift” et les builds instables entre machines ?

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.

Quelle est la façon la plus sûre de gérer les secrets dans un pipeline backend + web + mobile ?

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.

Quelle est la différence entre cache et artefacts, et quand utiliser chacun ?

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.).

Comment concevoir des clés de cache adaptées à un monorepo ?

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.

Comment empĂȘcher qu’un changement de README dĂ©clenche des builds backend, web et mobile ?

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.

Comment gérer la signature mobile sans ralentir chaque pull request ?

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.

Le CI peut-il gĂ©rer des projets oĂč le code est gĂ©nĂ©rĂ© (par exemple depuis un outil no-code) ?

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).

Facile à démarrer
Créer quelque chose d'incroyable

Expérimentez avec AppMaster avec un plan gratuit.
Lorsque vous serez prĂȘt, vous pourrez choisir l'abonnement appropriĂ©.

Démarrer