Passer à la navigation principale
CI/CD

Construction automatique d'Capacitor Android avec GitLab

Comment configurer une chaîne de CI/CD pour votre application Android Ionic en utilisant fastlane et GitLab en 5 minutes

Anik Dhabal Babu

Anik Dhabal Babu

Spécialiste du contenu

Automatic Capacitor Android build with GitLab

Construction automatique d'__CAPGO_KEEP_0__ Android avec GitLab

Setting up CI/CD for Capacitor apps can be complex and time-consuming. Here’s what you need to know:

La mise en place de CI/CD pour les applications __CAPGO_KEEP_0__ peut être complexe et chronophage. Voici ce dont vous avez besoin de savoir :

Prérequis : avant de commencer, vous devez configurer :

  • Avez-vous un compte GitLab avec accès administrateur
  • Votre application est déjà publiée sur Google Play Store avec une signature appropriée
  • Clés et fichiers de clés Android
  • Projet Google Cloud Console avec Play Store API activé
  • Compte de service avec les permissions appropriées
  • Compréhension des workflows CI/CD de GitLab
  • Connaissance de la configuration de Fastlane
  • Temps pour maintenir et déboguer le pipeline

Capgo Build pour CI/CD par Capgo

Évitez la maintenance de Fastlane, du lanceur Gradle, des clés et de l'upload-script. Capgo Build exécute des builds natifs Android signés à partir de votre pipeline CI/CD existant :

  • Fonctionne avec votre pipeline : Déclenchez la construction de Capgo à partir de GitLab CI, GitHub Actions, Jenkins ou scripts locaux après votre build web et npx cap sync.
  • Signature à partir de secrets CI : Conservez les clés de magasin Android, les alias de clés, les mots de passe et le JSON du compte de service de Console Google Play dans vos propres secrets CI.
  • Pas de maintenance de l'exécuteur natif : La construction de Capgo fournit des environnements de construction Android maintenus, vous n'avez donc pas à gérer les SDK images, les problèmes de cache Gradle ou les voies de Fastlane.
  • Artéfacts et soumission : Téléchargez les artefacts signés pour les tests ou soumettez les builds de lancement à travers le Capgo CLI.

Tarification

  • : Les plans Capgo commencent à 12 $/mois
  • : Inclut les mises à jour OTA et environ 15 constructions natives par mois
  • : Les minutes de construction supplémentaires sont facturées par minute à l'aide de crédits

Configurer Capgo Build dans CI/CD

Guide de configuration manuelle

Ici, voici ce dont vous avez besoin de faire :

Étapes à suivre dans cet article

  1. Copiez les fichiers Fastlane
  2. Stockez vos secrets dans les secrets chiffrés GitLab
  3. Créer et stocker votre clé de compte de service Google Play
  4. Stockez votre clé de signature Android
  5. Configurez votre flux de travail GitLab .yml

1. Copiez les fichiers Fastlane

Fastlane est une bibliothèque Ruby créée pour automatiser les tâches de développement mobile courantes. En utilisant Fastlane, vous pouvez configurer des « chemins » personnalisés qui regroupent une série d’« actions » qui exécutent des tâches que vous feriez normalement à l’aide d’Android Studio. Vous pouvez faire beaucoup de choses avec Fastlane, mais pour les besoins de cet article, nous utiliserons uniquement une poignée d’actions de base.

Créez un dossier Fastlane à la racine de votre projet et copiez les fichiers suivants : Fastlane

default_platform(:android)

KEYSTORE_KEY_ALIAS = ENV["KEYSTORE_KEY_ALIAS"]
KEYSTORE_KEY_PASSWORD = ENV["KEYSTORE_KEY_PASSWORD"]
KEYSTORE_STORE_PASSWORD = ENV["KEYSTORE_STORE_PASSWORD"]

platform :android do
    desc "Deploy a beta version to the Google Play"
    private_lane :verify_changelog_exists do |version_code: |
      changelog_path = "android/metadata/en-US/changelogs/#{version_code}.txt"
      UI.user_error!("Missing changelog file at #{changelog_path}") unless File.exist?(changelog_path)
      UI.message("Changelog exists for version code #{version_code}")
    end

    private_lane :verify_upload_to_staging do |version_name: |
      UI.message "Skipping staging verification step"
    end
    lane :beta do
				keystore_path = "#{Dir.tmpdir}/build_keystore.keystore"
				File.write(keystore_path, Base64.decode64(ENV['ANDROID_KEYSTORE_FILE']))
				json_key_data = Base64.decode64(ENV['PLAY_CONFIG_JSON'])
				previous_build_number = google_play_track_version_codes(
					package_name: ENV['DEVELOPER_PACKAGE_NAME'],
					track: "internal",
					json_key_data: json_key_data,
				)[0]

				current_build_number = previous_build_number + 1
				sh("export NEW_BUILD_NUMBER=#{current_build_number}")
        gradle(
          task: "clean bundleRelease",
          project_dir: 'android/',
          print_command: false,
          properties: {
            "android.injected.signing.store.file" => "#{keystore_path}",
            "android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
            "android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
            "android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
						'versionCode' => current_build_number
          })
        upload_to_play_store(
					package_name: ENV['DEVELOPER_PACKAGE_NAME'],
					json_key_data: json_key_data,
          track: 'internal',
          release_status: 'completed',
          skip_upload_metadata: true,
          skip_upload_changelogs: true,
          skip_upload_images: true,
          skip_upload_screenshots: true,
        )
    end
    lane :build do
      gradle(
        task: "clean bundleRelease",
        project_dir: 'android/',
        print_command: false,
        properties: {
          "android.injected.signing.store.file" => "#{keystore_path}",
          "android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
          "android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
          "android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
        })
    end
    lane :prod_release do
      build_gradle = File.read("../android/app/build.gradle")

      verify_changelog_exists(version_code: build_gradle.match(/versionCode (\d+)/)[1])
      verify_upload_to_staging(version_name: build_gradle.match(/versionName '([\d\.]+)'/)[1])

      supply(
        track_promote_to: 'beta',
        skip_upload_apk: true,
        skip_upload_aab: true,
        skip_upload_metadata: false,
        skip_upload_changelogs: false,
        skip_upload_images: false,
        skip_upload_screenshots: false
      )
    end
end

Stockez vos secrets dans les variables GitLab CI/CD

GitLab fournit une façon de stocker des variables CI/CD chiffrées, similaires aux secrets de votre repository GitHub . Pour stocker vos informations sensibles de manière sécurisée.

  1. Allez dans les paramètres de votre projet GitLab.
  2. Naviguez vers CI/CD > Variables
  3. Ajoutez les variables suivantes :
  • ANDROID_KEYSTORE_FILE : le fichier encodé en base64 .jks ou .keystore le fichier utilisé pour signer vos builds Android. Cela sera soit le fichier de clé associé à votre clé de téléversement (si vous utilisez Play App Signing), soit votre clé de signature d'application.
  • KEYSTORE_KEY_PASSWORD : le mot de passe associé au fichier de clé
  • KEYSTORE_KEY_ALIAS : l'alias de la clé de stockage
  • KEYSTORE_STORE_PASSWORD : le mot de passe de la clé privée
  • DEVELOPER_PACKAGE_NAME : votre ID d'application Android comme com.example.app
  • PLAY_CONFIG_JSON: La clé JSON du compte de service encodée en base64.

Créer une clé de compte de service Google Play

Pour générer le PLAY_CONFIG_JSON secret, suivez ces étapes :

  1. Allez sur le Console de Cloud Google
  2. Créez un nouveau projet ou sélectionnez un projet existant
  3. Activer le développeur Android Google Play API
  4. Créer un compte de service :
    • Allez dans « IAM & Admin » > « Comptes de service »
    • Cliquez sur « Créer un compte de service »
    • Donnez-lui un nom et une description
    • Cliquez sur « Créer et continuer »
    • Omettre l'attribution de rôl’et cliquez sur « Terminé »
  5. Générez une clé JSON :
    • Trouvez votre compte de service dans la liste
    • Cliquez sur le menu « … » > « Gérer les clés »
    • Cliquez sur « Ajouter une clé » > « Créer une nouvelle clé »
    • Choisissez le format JSON
    • Cliquez sur « Créer »
  6. Accordez au compte de service l'accès à votre application dans le console de Play :
    • Allez à Console de Play
    • Naviguez vers « Utilisateurs et permissions »
    • Clicker sur ‘Inviter de nouveaux utilisateurs’
    • Entrez l'adresse e-mail du compte de service (terminée par @*.iam.gserviceaccount.com)
    • Accordez la permission ‘Lancer en production’
    • Clicker sur ‘Inviter un utilisateur’
  7. Convertissez la clé JSON en base64 :
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. Ajoutez la chaîne encodée en base64 en tant que PLAY_CONFIG_JSON variable dans GitLab

Configurer votre pipeline CI/CD GitLab

Créez un fichier .gitlab-ci.yml à la racine de votre projet pour définir votre pipeline CI/CD. Voici un exemple de la structure que vous pouvez utiliser pour votre pipeline :


image: mingc/android-build-box:latest

stages:
  - build
  - upload_to_capgo
  - build_and_upload_android

build:
  stage: build
  tags:
    - saas-linux-xlarge-amd64
  cache:
    - key:
        files:
          - bun.lockb
      paths:
        - .node_modules/
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
      - node_modules/
      - dist/
  only:
    - master

upload_to_capgo:
  stage: upload_to_capgo
  tags:
    - saas-linux-xlarge-amd64
  script:
    - npx @capgo/cli@latest bundle upload -a $CAPGO_TOKEN -c dev
  dependencies:
    - build
  when: manual
  only:
    - master

build_and_upload_android:
  tags:
    - saas-linux-xlarge-amd64
  stage:    build_and_upload_android
  cache:
    - key:
        files:
          - android/gradle/wrapper/gradle-wrapper.properties
      paths:
        - ~/.gradle/caches/
  script:
    - npx cap sync android
    - npx cap copy android
    - bundle exec fastlane android beta # We do create a tag for the build to trigger XCode cloud builds
  dependencies:
    - build
  when: manual
  only:
    - master

Déclenchez la pipeline

Chaque fois que vous publiez une nouvelle étiquette dans votre dépôt GitLab, GitLab CI/CD déclenchera automatiquement la pipeline définie, qui construira et déployera votre application Android à l'aide de Fastlane.

Assurez-vous de réajuster les chemins et les dépendances en fonction de la structure et des besoins de votre projet. Cette configuration vous aidera à automatiser le déploiement de votre application Android sur GitLab CI/CD.

Conclusion

En configurant GitLab CI/CD avec l'image Docker mingc/android-build-box, vous pouvez automatiser le processus de construction de l'application Android, ce qui rend votre flux de développement plus efficace et fiable. Cette automatisation libère votre temps pour vous concentrer sur les aspects clés du développement d'applications, vous aidant ainsi à livrer des applications Android de haute qualité plus efficacement.

Continuez de Automatic Capacitor Android build avec GitLab

Si vous utilisez Automatic Capacitor Android build avec GitLab pour planifier l'automatisation de CI/CD, connectez-l’à Capgo CI/CD pour le flux de workflow de produit dans Capgo CI/CD, Capgo Native Builds pour le flux de workflow de produit dans Capgo Native Builds, Capgo Intégrations for the product workflow in Capgo Integrations, Intégration CI/CD pour les détails d'implémentation dans l'intégration CI/CD, et GitHub Actions d'intégration pour les détails d'implémentation dans GitHub Actions d'intégration.

Mises à jour en temps réel pour les applications Capacitor

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

un soutien humain de Martin

Commencez dès maintenant

Dernières actualités de notre Blog

Capgo vous offre les meilleures informations nécessaires pour créer une application mobile professionnelle de haute qualité.