Aller directement au contenu principal
CI/CD

Construction automatique de l'Capacitor build Android avec GitLab

Comment configurer une pipeline 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

Construction automatique de l'Capacitor build Android avec GitLab

Construction automatique des builds Android avec GitLab CI

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

Prérequis

Avant de commencer, vous devrez configurer :

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

Capgo Construire pour CI/CD par Capgo

Sauter la maintenance de Fastlane, du runner Gradle, du keystore et de l'upload-script. Capgo Construire exécute des builds natifs Android signés à partir de votre pipeline CI/CD existant :

  • Fonctionne avec votre pipeline : Déclencher Capgo Construire à partir de GitLab CI, GitHub Actions, Jenkins ou des scripts locaux après votre build web et npx cap sync.
  • Signature à partir de secrets CI : Garder les clés de store Android, les alias de clés, les mots de passe et le compte de service de la console Play dans vos propres secrets CI.
  • Pas de maintenance du compilateur natif: Capgo La mise en œuvre de build fournit des environnements de build Android maintenus, vous n'avez donc pas à gérer SDK les images, les problèmes de cache Gradle ou les voies de Fastlane.
  • Artéfacts et soumission: Téléchargez les artefacts signés pour la QA ou soumettez les builds de version à travers le Capgo CLI.

Tarification

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

Configurez Capgo Build dans CI/CD

Guide de configuration manuelle

Voici ce que vous devez faire :

Étapes à suivre dans le post

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

1. Copier 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 « voies » personnalisées qui rassemblent une série d'« actions » qui exécutent des tâches que vous effectueriez normalement à l'aide d'Android Studio. Vous pouvez faire beaucoup avec Fastlane, mais pour les besoins de ce tutoriel, 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 CI/CD GitLab

GitLab fournit une façon de stocker des variables CI/CD chiffrées, similaires aux secrets de repository de GitHub.

  1. Allez dans les paramètres de votre projet GitLab.
  2. Navigatez vers CI/CD > Variables
  3. Ajoutez les variables suivantes :
  • ANDROID_KEYSTORE_FILE : le fichier base64 codé .jks ou .keystore fichier utilisé pour signer vos builds Android. Cela sera soit le fichier de clé de votre clé d'upload (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é de stockage
  • 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 de compte de service base64 codée.

Création d'une clé de compte de service Google Play

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

  1. Allez à la Console de Google Cloud
  2. Créez un nouveau projet ou sélectionnez-en un existant
  3. Activer le développeur Google Play Android API
  4. Créez un compte de service :
    • Allez à « 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ôle et cliquez sur « Terminé »
  5. Générez une clé JSON :
    • Trouvez votre compte de service dans la liste
    • Cliquez sur le menu trois points > « 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 jeu :
    • Allez à Console de jeu
    • Naviguez vers « Utilisateurs et autorisations »
    • Cliquez sur « Inviter de nouveaux utilisateurs »
    • Entrez l'adresse e-mail du compte de service (se termine par @*.iam.gserviceaccount.com)
    • Accordez la permission « Lancer en production »
    • Cliquez sur « Inviter l'utilisateur »
  7. Convertir la clé JSON en base64 :
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. Insérer la chaîne base64 codée en tant que PLAY_CONFIG_JSON variable dans GitLab

Configurer votre pipeline CI/CD de 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 :


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éclencher le pipeline

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

Assurez-vous de modifier 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 vous libère du temps pour vous concentrer sur les aspects essentiels du développement d'applications, ce qui vous aide à livrer des applications Android de haute qualité de manière plus efficace.

Continuez de l'automatisation automatique de la construction d'application Android avec GitLab Capacitor

Si vous utilisez Construction automatique de l'Capacitor Android avec GitLab pour planifier l'automatisation CI/CD, connectez-le à l'Capgo CI/CD pour le flux de travail du produit dans l'Capgo CI/CD, l'Capgo Construction Native pour le flux de travail du produit dans l'Capgo Construction Native, l'Capgo Intégrations pour le flux de travail du produit dans l'Capgo Intégrations, Intégration CI/CD pour le détail d'implémentation dans l'Intégration CI/CD, et l'GitHub Intégration d'Actions pour le détail d'implémentation dans l'GitHub Intégration d'Actions.

Mises à jour en temps réel 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 modifications natives restent dans la voie de revue normale.

Démarrer maintenant

Dernières actualités de notre Blog

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