Aller directement au contenu principal

Les types de builds expliqués : De local à production

Trouvez-vous les différents types de builds confusants ? Ce guide explique tout, des builds locaux, CI, de débogage et de production aux stratégies de signature, de distribution et de retrait.

Martin Donadieu

Martin Donadieu

Marketing de contenu

Les types de builds expliqués : De local à production

Vous ouvrez un projet et voyez build:ios:dev, build:android:qa, build:staging, build:release, build:prod, ainsi que quelques scripts shell que personne ne veut toucher. Ensuite, quelqu'un dit, « Pouvez-vous créer une build de mise en scène pour le client avant la fin de la journée ? » Si vous êtes un développeur mobile de niveau moyen, cette demande peut vous sembler vaguement ennuyante. Laquelle de la configuration ? Laquelle de l'identité de signature ? Lequel du backend ? Lequel du chemin de distribution ?

Cette confusion vient généralement du fait de considérer les types de builds comme une liste plate. Ce n'est pas le cas. Ce sont une workflow. Chaque build existe pour résoudre un problème spécifique à un point précis entre votre ordinateur portable et le dispositif d'un utilisateur.

Un build n'est pas juste une application compilée. C'est une version de votre application assemblée pour une finalité, un public et un environnement. Certains builds existent pour vous aider à déboguer. D'autres existent pour aider les équipes QA à faire des choses de manière sécurisée. D'autres existent pour que les équipes de lancement puissent produire un artefact fiable. D'autres existent pour que les équipes de produits puissent envoyer des changements avec moins de risques.

Si votre configuration locale vous semble encore instable avant même que cela commence, mettez d'abord cela sous contrôle avec un setup de l'environnement local approprié Capacitor local environment setupTable des matières

Défaire les nœuds du monde des builds logiciels

Défaire les Nœuds du Monde des Constructions Logicielles

L'erreur la plus courante que je vois est de supposer que les noms de construction racontent toute l'histoire. Ils ne le font pas. staging Cela pourrait signifier « goût de version de mise en production pointé vers les APIs de staging ». Dans un autre dépôt, cela pourrait signifier « artefact QA déboguable avec paiements simulés ». Dans un troisième, cela pourrait signifier « build signé de production distribué de manière privée ».

C'est pourquoi les équipes se retrouvent enlisées. L'étiquette n'est utile que si vous comprenez la tâche que cette construction est censée accomplir.

Une façon utile de penser aux types de constructions est celle-ci :

  • Constructions locales aider un développeur individuel à se déplacer rapidement.
  • Constructions CI créer une source de vérité partagée pour l'équipe.
  • Débogage et versions de sortie définir comment l'application est compilée et instrumentée.
  • Constructions de distribution définir qui reçoit l'application et comment.
  • Constructions signées déterminer si la plateforme fera confiance à l'artifact.
  • Mises à jour basées sur le canal déterminer comment les changements se déplacent après l'installation.

Ces catégories ne sont pas concurrentes. Elles s'empilent.

Un « build de mise en scène » n'est rarement une chose unique. C'est généralement une combinaison de saveur, d'environnement, de signature et de choix de distribution.

C'est pourquoi deux équipes peuvent tous deux dire « nous avons besoin d'un build de bêta » et vouloir des artefacts complètement différents.

Cela compte le plus sur mobile car chaque étape ajoute de la friction. La compilation native, les secrets, la provisionnement, les pistes de l'application, l'accès des testeurs, la configuration de l'environnement et le retraitement doivent s'aligner. Si une partie est défaillante, votre processus de mise en production devient un savoir-faire tribal. Alors qu'un ingénieur part en vacances et personne ne peut lancer proprement.

Les équipes qui gèrent bien cela ne mémorisent pas plus de scripts. Elles définissent les types de build comme des barrières qualité. Chaque barrière réduit un type de risque différent : code cassé, mauvaise configuration, signature incorrecte, mauvaise mise en œuvre ou mauvaise récupération.

Le Spectre de la Construction Local vs Builds CI

Un build local est la version que vous faites pour vous-même. Un build CI est la version que l'équipe peut se fier.

Cela semble évident, mais une grande partie de la douleur de build commence lorsque les équipes brouillent ces deux ensemble. Quelqu'un prouve « cela fonctionne sur mon ordinateur », puis la branché fail dans CI car l'environnement local impliquait implicitement une dépendance en cache, un fichier édité manuellement ou un atout de signature qui n'a jamais été intégré à l'automatisation.

Un homme concentré travaillant sur son ordinateur portable dans un bureau moderne, étudiant le développement local par rapport au développement CI.

Builds locaux

Les builds locaux sont privés, rapides et jetables. Vous les utilisez pour répondre à des questions immédiates.

Peut la page s'afficher ? Le plugin natif s'initialise-t-il ? A-t-il changé la compilation Gradle ou Xcode qui a brisé la compilation ? Puis-je reproduire la panne avec les journaux activés ?

Une bonne construction locale donne la priorité à la vitesse plutôt qu'à la cérémonie. Elle comprend souvent des contrôles plus souples, des journaux verbaux, des commutateurs de développeur et des instruments temporaires. C'est tout à fait normal. Son travail est de fournir un feedback rapide.

Ce qui ne fonctionne pas, c'est promouvoir une construction locale à quelque chose de plus important qu'elle ne l'est. Une construction locale ne devrait jamais devenir l'artefact de version finale car elle s'est compilée avec succès sur un seul ordinateur portable.

Constructions CI

Les constructions CI sont plus lentes pour une raison. Elles suppriment l'état de la machine personnelle de l'équation et rendent le processus de construction répétable.

Lorsque CI est en bonne santé, il fait trois choses bien :

  • Reconstruit à partir de zéro : Elle prouve que le projet peut se compiler sans hypothèses locales cachées.
  • Exécute des contrôles au niveau de l'équipe : Les tests unitaires, la mise en forme, et les règles de packaging se produisent dans le même endroit chaque fois.
  • Produit un artefact suivi : L'équipe peut relier une construction à un commit, une branch et une exécution de pipeline.

C'est pourquoi j'aime l'analogie atelier-fabrique. Votre ordinateur portable est l'établi où vous itérez. Le CI est la chaîne de montage qui prouve que le processus est réel.

Si votre équipe décide encore manuellement laquelle de la script s'exécute où, centralisez cette logique dans l'automatisation. Un référentiel pratique est ce guide sur la gestion des builds de dev et de prod avec GitHub Actions.

Règle pratique : Si la QA, le produit ou le support a besoin de l'artifact, il devrait provenir du CI, et non d'une machine de développeur.

Une fois que vous acceptez cela, le reste du cycle de build devient plus facile. La sélection de saveur, la signature, l'injection d'environnement et la distribution appartiennent tous à une pipeline que n'importe qui sur l'équipe peut inspecter.

Flavours de Build Débogage vs Lancement

Il existe de nombreux étiquettes utilisées pour les builds, mais sous toutes ces dénominations, deux saveurs intéressent le plus souvent : débogage et lancement.

Ils existent parce que les développeurs et les utilisateurs finaux ont besoin de choses opposées.

Une infographie de comparaison entre la version de débogage et la version de production montrant les principales différences en termes de performance et de but.

Versions de débogage

Une version de débogage est conçue pour aider les humains à inspecter le comportement. Elle garde généralement plus de métadonnées, facilite la dépannage et évite l'optimisation agressive qui peut cacher les problèmes.

Il y a une utile analogie avec les spécifications de construction. Les spécifications sont généralement classées en prescriptive, performance, proprietary, et reference-standard types, et une version de débogage correspond bien à une prescriptive approche car elle dicte des outils et des méthodes exacts pour l'analyse, tandis qu'une version de production correspond à un performance approche axée sur le résultat requis, comme indiqué dans ce détail des types de spécifications de construction.

En pratique, une build de débogage est là où vous voulez des choses comme :

  • Diagnostic lisible : stack traces, sortie de console et symboles qui vous aident à trouver la faille.
  • Facilités pour les développeurs : interrupteurs de mock, menus de test et commutateurs de fonctionnalités qui seraient inappropriés pour les utilisateurs finals.
  • Itération à faible friction : des cycles d'installation et de lancement rapides comptent plus qu'un paquet soigné.

Les builds de débogage ne sont pas « mauvais ». Ils sont conçus pour une fin spécifique.

Les builds de production

Les versions de production sont créées pour les appareils dans la nature. Cela change les priorités immédiatement.

Vous vous souciez maintenant de l'intégrité des packages, du comportement de démarrage, d'une posture de sécurité plus serrée, de charges de travail plus petites et de caractéristiques de temps d'exécution prévisibles.

Vous voulez également moins d'entrées accidentelles pour l'inspection ou la mauvaise utilisation.

Le compromis est simple. Tout ce qui rend les versions de débogage plus faciles à inspecter tend à rendre les versions de production moins appropriées pour la production.

Voici la frontière de décision que j'utilise avec les équipes : Flavor Meilleur pour
Ce qu'il optimise Débogage Développement, test local, reproduction d'erreurs
Visibilité et vitesse d'itération Version de production Stabilité, performance et confiance

Pourquoi les équipes font toujours cela mal

La plus grande source de confusion est la mélange de « environnement » avec « saveur ».

Une construction peut être une saveur de mise en production pointant vers les services de mise en scène. C'est courant pour la QA car vous voulez un comportement de production avec des données non de production. Une construction peut également être une saveur de débogage pointant vers les services de développement pour le codage de tous les jours. Ce sont des axes différents.

Une grande partie de la prolifération de scripts provient des équipes qui codent toutes les combinaisons possibles dans les noms de packages au lieu de documenter la matrice.

Envoyez la saveur de mise en production chaque fois que les non-développeurs testent le comportement utilisateur. Gardez la saveur de débogage pour le travail d'ingénierie et le dépannage délibéré.

Cette règle élimine beaucoup de complexité accidentelle.

Correspondance des constructions aux environnements de distribution

La plupart des discussions sur les types de builds s'arrêtent trop tôt. Elles expliquent les builds locaux, de débogage et de production, puis ignorent la question plus difficile : où va ce build ?

Ce destin change ce que le build doit contenir, comment il doit être signé et qui doit le recevoir.

Un workflow de build pratique passe généralement par plusieurs environnements, chacun avec un public différent et une tolérance différente pour le risque. Si vous travaillez sur des applications Capacitor, il est également utile de maintenir une séparation mentale claire entre le comportement des applications de développement et de production dans Capacitor development and production app behavior in CapacitorNightly et canary

Ces sont des builds d'avertissement précoce. Ils sont destinés aux ingénieurs, à la QA ou à un petit groupe interne prêt à tolérer les bords rugueux.

Un build nightly est généralement généré à un horaire ou à partir de l'état de la branch principale la plus récente. Un build canary est intentionnellement exposé à un public restreint avant une mise en œuvre plus large. Je les traite comme des outils d'apprentissage, et non comme des promesses de stabilité.

Ils sont utiles lorsque vous avez besoin de répondre à des questions comme :

Intègre-t-il proprement la branch entre les modules ?

  • A-t-il cassé une famille de dispositifs spécifique en mettant à jour une dépendance native ?
  • Les testeurs internes peuvent-ils détecter des régressions avant une exposition plus large à la beta ?
  • Does the branch integrate cleanly across modules?

Ce qui ne fonctionne pas, c'est de donner des builds canari à des personnes qui attendent un logiciel poli. Vous obtiendrez des retours bruyants, et la mauvaise audience appellera un problème de mise à jour une problématique de sortie.

Étape et bêta

À ce stade, la qualité du produit commence à compter plus que la commodité de l'ingénierie.

Un build d'étape ou bêta devrait ressembler à ce que les utilisateurs réels recevront. Cela signifie généralement une saveur de sortie, une configuration similaire à la production là où possible, et une distribution contrôlée à l'aide d'outils de plateforme comme TestFlight ou les pistes de test Google Play.

L'audience change ici :

  • La QA valide les régressions, les workflows et les critères d'acceptation.
  • Les gestionnaires de produit examinent le comportement dans un shell réaliste.
  • Les testeurs externes valident l'utilisabilité, la couverture des appareils et les cas d'extrémité.
  • Les équipes de support ou de succès peuvent prévisualiser les changements à venir.

L'erreur ici est de considérer la bêta comme « un autre build de débogage ». Si vos testeurs évaluent des flux d'utilisateurs réels, ils ont besoin de conditions similaires à la sortie.

Builds de distribution privée

Certaines applications nécessitent des builds qui ne sont jamais destinés à l'audience du magasin public du tout, ou qui doivent atteindre un groupe plus restreint en premier lieu.

Cela comprend les builds spécifiques au client, les applications internes pour les employés, les flux de travail réglementés, les outils d'opérations de terrain et les distributions uniquement entreprises.

Ces éléments nécessitent souvent un contrôle plus strict sur qui peut installer l'application et sur le backend qu'ils atteignent.

  • C'est aussi là où le nommage devient dangereux. Les équipes disent souvent « build d'entreprise » quand elles veulent en réalité l'un des différents éléments :
  • une application interne signée privée
  • une application distribuée par le magasin avec des contrôles d'accès uniquement internes
  • un artefact personnalisé pour le client

un candidat à la version de pré-production pour la revue des parties prenantes

Ces sont différents modèles opérationnels. Gardez-les séparés dans votre pipeline et dans le nommage.

Production

Les builds de production sont l'engagement public. Ils sont envoyés vers l'App Store, Play Store ou le canal approuvé équivalent pour vos utilisateurs.

À ce stade, le build devrait être banal. C'est un compliment.

Vous voulez que le build de production soit réproducible, signé correctement, testé dans des conditions de mise en production et lié à un plan de reversion. Vous ne voulez pas d'ajustements manuels à la dernière minute, de hacks spécifiques à la machine ou de compromis « on le fixera dans le prochain build ».

Types de construction logicielle et leurs caractéristiques

Type de construction Public Configuration Méthode de distribution
Développeur local Développeur individuel Généralement debug, itération rapide, paramètres d'environnement local Installation directe à partir de la machine locale
Validation CI Équipe d'ingénierie Construction automatisée répétitive, vérifications partagées Stockage d'artefacts CI
Nuit ou canari Testeurs internes, membres sélectionnés de l'équipe État d'intégration précoce, déploiement limité Outils de distribution internes
Étape de pré-production ou bêta QA, produit, testeurs externes Environnement de cartographie non public, généralement similaire à une version de production TestFlight, pistes de test Play, liens privés
Ad-hoc ou entreprise Employés internes, clients, groupes restreints Configuration contrôlée, signature spécifique au destinataire Canaux de distribution privés
Production Utilisateurs publics __CAPGO_KEEP_0__ de configuration de la mise en production, signature prête à l'emploi App Store ou Google Play

Le bon type de build est celui qui correspond à la tolérance du public au risque. La plupart des erreurs de mise en production se produisent lorsque les équipes ignorent cette alignement.

Le rôle critique de la signature Code

Un fichier de build par lui-même n'a pas beaucoup de sens sur les appareils mobiles. La plateforme a besoin de preuves qu'il provient d'une source fiable et qu'il n'a pas été modifié après sa création. Ces preuves sont La signature code.

Si vous avez déjà eu un build qui s'est compilé parfaitement mais qui a refusé d'installer, d'envoyer ou de lancer correctement, la signature était probablement le problème.

Une écran d'ordinateur affichant un code source Python code pour Blender avec un texte de signature Code

Ce que la signature prouve réellement

Pour une équipe mobile, code signe trois tâches.

  • Authenticité : il lie l'application au développeur ou à l'organisation qui l'a produite.
  • Intégrité : il aide à prouver que l'artefact n'a pas été modifié depuis la signature.
  • Autorisation : surtout sur les plateformes Apple, il contrôle également où et comment l'application est autorisée à s'exécuter.

Ce troisième point est ce qui confond beaucoup de développeurs. La signature n'est pas seulement une identité. C'est aussi une autorisation.

Ainsi, la même application code peut nécessiter différents matériaux de signature en fonction de l'endroit où vous souhaitez l'exécuter, la distribuer aux testeurs, la déployer en interne ou la soumettre à l'app Store.

Comment la signature change en fonction du destinataire

C'est ce modèle mental qui maintient le processus sain : la signature suit la distribution.

A un développeur local, une installation utilise un ensemble d'identités et de permissions. Une version bêta envoyée via TestFlight utilise un autre. Un chemin de distribution interne peut nécessiter des profils différents à nouveau. Une mise en magasin publique a ses propres attentes de signature et de packaging compatible avec les examens.

C'est pourquoi « résigner simplement la build » est rarement une petite demande. Une fois que les changements de signature sont effectués, les destinations autorisées de l'artefact peuvent changer avec elles.

Une mise en place disciplinée comprend généralement :

  • Les actifs de signature stockés dans CI : pas sur les ordinateurs portables personnels.
  • Une séparation claire par cible : le développement, les tests privés, l'entreprise, la mise en magasin.
  • La rotation et les contrôles d'accès : en particulier lorsque des sous-traitants ou plusieurs équipes de produits partagent l'infrastructure.
  • La traçabilité : vous devez savoir quel pipeline a utilisé quelle identité de signature.

Si votre équipe envoie des mises à jour web à l'intérieur d'une application Capacitor, il y a une deuxième couche de signature à prendre en compte également. Cette vue d'ensemble de sécurité de bout en bout pour le Capacitor mises à jour code signature ceci est utile car il sépare la confiance dans les binaires natifs de la confiance dans le package de mise à jour.

Les problèmes de signature ne viennent généralement pas de la cryptographie. Ils viennent de la propriété non claire, de la manipulation manuelle et des pipelines de construction qui cachent quelle identité a été appliquée.

Traitez les matériaux de signature comme de l'infrastructure de production, car c'est ce qu'il est.

Coordonner les Lancements avec CI/CD et les canaux de mise à jour

Au moment où une équipe se mûrit, le défi n'est pas de connaître les types de builds. C'est de les coordonner sans travail humain.

Cette coordination appartient à CI/CD.

Capture d'écran depuis https://capgo.app

Votre pipeline est le contrat de construction

Un pipeline fiable devrait répondre aux mêmes questions chaque fois :

  • ce que cette construction est pour
  • quelle saveur elle utilise
  • quels valeurs d'environnement il reçoit
  • quels tests il doit passer
  • à laquelle identité de signature s'applique
  • où l'artefact se fait livrer

Cette structure reflète une bonne spécification technique. Une bonne spécification bien formée devrait inclure la finalité et le champ d'application, les exigences fonctionnelles, les exigences de conception, les normes techniques, les exigences de test, les exigences de livraison et les exigences de support ou de maintenancecomme décrit dans ce guide de spécification technique. Cette même discipline rend le CI/CD plus facile à raisonner car la pipeline cesse d'être un sac de scripts et devient une politique de lancement exécutable.

En pratique, la pipeline devrait décider, et non l'ingénieur qui la lance manuellement. Les règles de branchement, les étiquettes, les étapes d'approbation, le contexte de signature et les cibles de déploiement devraient tous être codés.

Ce qui fonctionne :

  • l'intention basée sur la branchement Les branches de mise en production, les branches de mise à jour et les étiquettes déclenchent différents workflows.
  • Nom explicite des artefacts : Le goût, l'environnement et la cible sont visibles dans la sortie.
  • Promotion au lieu de reconstruction manuelle : Transférer les artefacts validés plutôt que de les recréer ad hoc.

Ce qui ne fonctionne pas de manière consistante est l'approche d'un script flexible où tout le monde passe des drapeaux personnalisés et espère qu'ils correspondent à ce que les magasins ou les testeurs nécessitent.

Les canaux ajoutent un contrôle après que le binaire a été expédié

Les builds natifs sont encore grossièrement granulaires. Une fois qu'une mise en production est dans le magasin, changer le contenu web à l'intérieur d'une application Capacitor n'a pas toujours besoin d'un binaire tout nouveau.

C'est là où les canaux de mise à jour deviennent utiles. Ils permettent aux équipes de cibler les mises à jour d'actifs web vers un sous-ensemble d'utilisateurs à l'intérieur d'un binaire de production installé. Pour les équipes Capacitor , une option est Capgoqui publie des ensembles de web signés vers des canaux ciblés afin que vous puissiez pousser les modifications de JavaScript, CSS, texte, configuration et actifs sans reconstruire la coquille native à chaque fois.

Un modèle pratique ressemble à ceci :

  • Build binaire dans CI/CD : créer, signer et distribuer l'application native.
  • Affectation de canal : associer les utilisateurs ou les environnements aux flux de test, de pré-production, de production ou spécifiques à la clientèle.
  • Déploiement sélectif : envoyer les modifications web à un groupe avant une exposition plus large.
  • Voie de reversion : désactiver ou rétablir une mise à jour nuisible sans attendre la revue du magasin.

Si vous n'avez pas configuré ce modèle encore, ce guide de marche sur la création et la suppression de canaux de mise à jour dans Capacitor fait les mécanismes concrets.

Un court démonstration est utile si vous n'avez pas vu les canaux en action :

Cette est la mutation stratégique dont ont besoin de nombreux équipes mobiles. Les types de construction ne sont pas seulement des artefacts. Ils sont des points de contrôle. La CI/CD contrôle comment les fichiers binaires sont produits. Les canaux contrôlent comment les modifications post-installation sont exposées.

Meilleures Pratiques pour un Flux de Construction Moderne

Un système de construction sain est opiné. Il ne laisse pas chaque développeur improviser le comportement de la mise en production.

Les configurations les plus solides dont j'ai travaillé partagent quelques habitudes :

  • Séparer clairement les axes : le goût, l'environnement, la cible de signature et la cible de distribution ne doivent pas être mélangés dans une étiquette vague.
  • Laisser la CI produire des artefacts destinés à l'équipe : les constructions locales sont pour le développement, pas pour la confiance des parties prenantes.
  • Tester dans des conditions de mise en production similaires tôt : Les QA et les testeurs bêta devraient voir un comportement qui se rapproche le plus possible de l'application réelle.
  • Conserver les actifs de signature hors des ordinateurs portables : les secrets appartiennent à l'infrastructure contrôlée avec un accès étroit.
  • Nommez les artefacts de telle sorte que les humains puissent les lire : Si quelqu'un ne peut pas identifier à quoi sert un fichier en quelques secondes, le nommage est mauvais.
  • Préférez la promotion à la reconstitution : Lorsqu'un artefact est validé, déplacez-le plutôt que de le reconstruire manuellement.
  • Concevez le rôle avant le lancement : Le rôle de stockage est lent et opérationnellement lourd. Le rôle de la couche web pour les mises à jour de Capacitor peut être beaucoup plus rapide, mais seulement si vous avez planifié les canaux et les politiques à l'avance.

La plus grande modification de mentalité est celle-ci : ne demandez pas « quel script de construction devrais-je exécuter ? » Demandez-vous plutôt « quel risque gère-t-on à ce stade ? » Cette question produit de meilleurs systèmes de construction.

Si votre flux de travail répond clairement à cette question, votre processus de mise en production devient plus facile à gérer, plus facile à auditer et beaucoup moins dépendant d'un ingénieur senior qui se souvient de la bonne incantation.


Si votre équipe délivre des applications Capacitor et souhaite avoir un contrôle plus serré sur les flux de travail de mise en production, Capgo est une solution à évaluer dans votre stack. Elle gère les mises à jour ciblées en temps réel pour les actifs web à l'intérieur des applications Capacitor, prend en charge les ensembles signés, les lancements par canal et les contrôles de rôle, ce qui la rend utile lorsque vous avez besoin de correctifs plus rapides sans remplacer votre pipeline de construction native.

Mises à jour en direct pour les applications Capacitor

Lorsqu'un bug de la couche web est en ligne, expédiez la correction par Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les changements natifs restent dans le chemin de revue normal.

Commencez maintenant

Dernières actualités de notre blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.