Site icon Blog ARC Optimizer

Construire et expédier une application iOS native React avec Jenkins: un pipeline pratique de bout en bout

Construire et expédier une application iOS native React avec Jenkins: un pipeline pratique de bout en bout


Si vous maintenez un monorepo natif de React et avez besoin d’un pipeline de construction iOS répétable et en clic, ce post vous guide à travers une configuration de Jenkins de qualité de production:

  • Sélectionne les environnements, les schémas et les configurations au moment de la construction
  • Installe les dépendances (Node, Ruby / Bundler, Cocoapods) proprement
  • Archives et exporte un IPA via XcodeBuild
  • Télécharge des artefacts sur Amazon S3
  • Génère une URL de téléchargement pré-signée
  • Informe votre équipe sur Google Chat

Nous décomposerons l’ensemble de JenkinsFile, expliquerons chaque étape et signaler les gotchas et les améliorations de fiabilité et de sécurité. De nombreuses entreprises rationalisent aujourd’hui ce processus en combinant React Native Solutions de développement d’applications mobiles avec Services de conseil DevOps Pour permettre des pipelines de livraison sécurisés, évolutifs et reproductibles.

Tous les exemples ci-dessous sont adaptés pour une application native React vivant à ../packages/mobile/IOS à l’aide d’un schéma Xcode MyDemoproject. Échangez les noms / chemins vers votre projet en conséquence.

Pourquoi Jenkins pour RN iOS?

Jenkins offre la flexibilité pour gérer les constructions natives React complexes, gérer les agents distribués et automatiser les workflows reproductibles. Ces avantages sont mieux réalisés lorsqu’ils sont alignés avec l’expert Services de conseil DevOpsqui garantissent la configuration de l’environnement correct, la gestion des informations d’identification et l’automatisation CI / CD adaptée aux besoins en entreprise.

Buildages déterministes: Les versions de nœud / rubis épinglées et les espaces de travail nettoyés réduisent les problèmes de «travaux sur ma machine».
Mac auto-hébergé: La signature iOS et XcodeBuild nécessitent un macOS. Les agents (ou nœuds) de Jenkins vous permettent d’étendre à travers Mac Minis.
Fan-out flexible: Créez plusieurs schémas / environnements sans duplication de travaux.
Artefacts de première classe: Les IPA d’archives, poussent vers S3, créent une traçabilité de construction immuable.

Débit de haut niveau

  • Construction paramétrée – Le développeur sélectionne Env, Schema, Configuration, GIT_BRANCH et ajoute des notes de version.
  • Vérifier – Clone la branche Git demandée.
  • Configuration de l’approvisionnement – Installez le profil d’approvisionnement et le certificat de signature sur le système. Cela peut être fait manuellement ou automatisé via un script.
  • Installer et préparer – Exécutez l’installation du fil, le bundler et les cocoapodes. Appliquez des valeurs de signature au projet Xcode selon les besoins.
  • Exportoptions.plist – Ce fichier est requis pour l’exportation IPA. Créez et configurez-le avec des détails tels que la méthode de distribution, l’ID d’équipe et les profils d’approvisionnement. (Pour une référence détaillée, consultez la documentation d’Apple ou le guide lié plus tôt.)
  • Construire – Exécutez XCodeBuild Clean, archisez le projet et exportez l’IPA à l’aide -exportarchive.
  • Renommer et télécharger – Ajoutez un horodatage au nom de fichier IPA, téléchargez-le sur S3 et générez une URL pré-signée.
  • Aviser – publier une notification de construction (avec l’environnement, la branche, la configuration et le lien de téléchargement) sur Google Chat, Slack ou Teams.
  • Archive et nettoyage – Stocker des artefacts à Jenkins pour auditer et essuyer l’espace de travail pour se préparer à la prochaine course.

À Au nouveaunous aidons l’architecte à ces flux dans le cadre de notre plus large services d’ingénierie numériques’assurer que les pipelines sont maintenables, efficaces et prêts à l’échelle.

Le Jenkinsfile (annoté)

Ce que fait chaque étape (et des notes spécifiques à RN)

Paramètres

  • Env: Contrôle les chemins de code spécifiques à l’environnement (points de terminaison API, drapeaux).
  • SCHÉMA: Liens avec la configuration du schéma de Xcode. Pour prod, utilisez la version; Pour d’autres, utilisez la mise en scène.release.
  • Configuration: Les gardes contre le débogage se construisent en production.
  • Git_branch: Permet de construire rapidement les branches chauds.
  • Release_notes: Envoyé au chat; Utile pour auditer le pourquoi derrière une construction.

Nettoyer l’espace de travail

  • Assure une nouvelle construction (pas de gousses périmées ou de données dérivées qui fuisent à travers les emplois). Envisagez d’activer le nettoyage de l’espace de travail Jenkins à l’échelle mondiale.

Vérifier

  • Clones la branche exacte demandée. Dans Monorepos, cela évite de copier les gigaoctets à travers les nœuds en laissant Git faire des récupérations peu profondes si vous les définissez.

Installez les dépendances et la construction

  • Installation du fil: Effacer les verrous pour casser les mauvais écrans (facultatif; vous pouvez préférer garder les fichiers de verrouillage pour le déterminisme).
  • Ruby / Bundler / Pods: Épingle via gemfile et podfile.lock. Utilisez l’installation du pod bundle exec.
  • Signature des modifications via SED: Fonctionne, mais préfèrent les paramètres de construction .xcConfig ou Xcode par configuration pour éviter d’édition projeter.pbxproj à l’exécution.

Environnement:

  • Node_Options = –OpenSSL-legacy-Provider aide certaines LIB crypto sur le nœud 17/18/20.
  • Lang / LC_ALL SET pour éviter les problèmes de pod liés aux paramètres régionaux.
  • Rct_no_launch_packager = 1 désactive le métro pendant CI (plus rapide, moins de journaux).

xcodebuild:

  • Archive écrit sur ~ / bibliothèque / développeur / xcode / archives / /videoready.xcarchive.
  • -ExportArchive utilise exportoptions.plist (définissez votre méthode: application, ad hoc, entreprise, etc.).

Renommer l’IPA

  • Ajoute un horodatage: sooka_yyyymmdd_hhmms.ipa. Aide à la traçabilité.

Téléchargez sur S3

  • Télécharge l’ipa vers S3: // / .ipa. Verrouillez le seau avec IAM; Ne le rendez pas public.

URL et notification pré-signatées

  • URL pré-signée (par exemple, 20 heures = 72 000 secondes) partagée avec l’équipe.
  • Carte de chat Google avec les informations sur le travail, la branche, l’environnement, la configuration et le lien de téléchargement.
  • Utilisez des informations d’identification Jenkins pour le Chat WebHook: Never Hard-Code URL ou jetons.

Post-actions

  • Archiveartifacts garde une copie à l’intérieur de Jenkins pour l’audit.
  • Cleanws garantit que la prochaine construction est vierge.

Meilleures pratiques de sécurité et de fiabilité

  1. Déplacez tous les secrets vers les informations d’identification de Jenkins
    • Keychain_password, S3 Indementiels, Google Chat WebHook, Git Deploy Key.
    • Utilisez des blocs WithCredentials (UserNamePassword, String, SShuserPrivateKey).
  2. Ne vous a pas séduit votre fichier de projet dans CI
    • Préférez les paramètres XCCONFIGS et Per-Config Build, ou les paramètres de passage sous forme de arguments XcodeBuild (provisioning_profile_specifier =… code_sign_style = manuel).
  3. Versions d’outillage d’épingle
    • Node avec tension / nvm + .nvmrc.
    • Ruby avec .Ruby-Version (+ Bundler).
    • COCOAPODS Version dans Gemfile pour éviter «Works Hier, Breaks Today».
  4. Cache sagement
    • Cache gods / et ~ / bibliothèque / caches / cocoapods pour accélérer les builds.
    • Modules de fil de cache (~ / .cache / yarn) par version de nœud.
    • Dans Jenkins, utilisez des étiquettes de nœuds (par exemple, macOS-M1) et des espaces de travail persistants avec des caches @libs.
  5. Signature de code
    • Considérez Fastlane Match pour gérer les certificats et les profils via un dépôt privé.
    • Déverrouiller les clés en utilisant des informations d’identification; Importer des certificats et des profils pendant le travail.
  6. Étapes mono divisées
    • Créez des étapes dédiées pour «préparer la signature», «Pods Installer», «build». Des échecs plus faciles à repérer et à réessayer une seule étape.
  7. Journalisation et métriques
    • Pipe xcodeBuild via XCBeAutify ou XCPretty pour les journaux lisibles.
    • Émettez des métadonnées de construction (Env, Schema, Commit Sha) dans votre système d’observabilité.

Pièges communs (et correctifs)

  1. L’installation des pods échoue sur CI, fonctionne localement
    • Pin Cocoapods via Bundler; Assurez-vous que Lang et LC_ALL sont définis; Assurez-vous que les outils de ligne de commande xcode sont sélectionnés (Xcode-Select -P).
  2. Code Signer intermittent
    • Utilisez la signature automatique par cible uniquement dans Dev. Pour CI, gardez la signature manuelle et les profils cohérents.
  3. Metro Bundler lance
    • Assurez-vous RCT_NO_LAUNCH_PACKager = 1 et aucune phase « Exécuter le script » ne démarre Metro pour la libération.
  4. Mauvais schéma / configuration utilisé
    • Vérifiez que votre .xcscheme contient la configuration de construction attendue. Évitez l’édition avec SED; Gardez les variantes .xcscheme contrôlées par source.

Des décalages de dépendance aux erreurs de signature, les pièges courants peuvent faire dérailler un pipeline. S’attaquer à ces premiers nécessite à la fois des correctifs techniques et un cadre CI / CD structuré, qui vient de la combinaison de la flexibilité des Jenkins avec Services de cloud et de DevOps.

Quoi améliorer ensuite

  • Emballages rapides: Fastlane Gym pour construire / exportation; Fastlane fonctionne pour les notifications de téléchargement et de chat S3.
  • Parallélisation: Matrix Builds par Env ou par famille d’appareils.
  • Distribution: Intégrez avec TestFlight ou Enterprise MDM si nécessaire.

Pour les entreprises évoluant à grande échelle, Au nouveau offres Services d’ingénierie de produits numériques Pour étendre les pipelines CI / CD avec une surveillance des performances, des portes de qualité automatisées et des intégrations natives dans le cloud.

Résumé:

  1. Ce pipeline Jenkins vous donne:
    • Des versions iOS axées sur les paramètres pour plusieurs environnements / schémas
    • Configuration de la dépendance propre pour React Native (YARN + Bundler + Pods)
    • Archive / exportation fiable XcodeBuild avec signature contrôlable
    • Stockage d’artefact sur S3 et notifications d’équipe instantanée
    • Archives propres et courses reproductibles

Si vous souhaitez implémenter une configuration similaire pour vos versions iOS natives React, n’hésitez pas à me connecter avec moi – je serai heureux de vous guider tout au long du processus. J’ai travaillé en étroite collaboration avec un ingénieur DevOps pour configurer le pipeline Jenkins, puis j’ai intégré mes propres scripts pour automatiser le flux de construction.

À la nouvelle, nous aidons les entreprises à construire des pipelines modernes à travers Solutions de développement d’applications mobilesDevOps Consulting Services et Expertise en génie numérique, permettant un délai de marché plus rapide sans compromettre la qualité.

Un merci spécial à Saurabh Joshi Pour son soutien à la création et à la mise en place du pipeline pour le projet sur lequel je travaille actuellement.

Vous avez trouvé cela utile? PARTAGEZ-LE






Source link
Quitter la version mobile