Saltar al contenido principal
CI/CD

Automatic Capacitor Android build with GitLab

Cómo configurar una pipeline de CI/CD para tu aplicación de Android Ionic utilizando fastlane y GitLab en 5 minutos

Anik Dhabal Babu

Anik Dhabal Babu

Gerente de contenido

Automatic Capacitor Android build with GitLab

Compilaciones de Android automáticas con GitLab CI

Configurar CI/CD para aplicaciones Capacitor puede ser complejo y tiempo consumidor. Aquí está lo que necesitas saber:

Requisitos previos

Antes de empezar, necesitarás configurar:

  • A cuenta de GitLab con acceso administrativo
  • Su aplicación ya publicada en Google Play Store con firmado correctamente
  • Clave de firma Android y archivos de keystore
  • Proyecto de Google Cloud Console con Play Store API habilitado
  • Cuenta de servicio con permisos adecuados
  • Comprensión de flujos de trabajo CI/CD de GitLab
  • Conocimiento de configuración de Fastlane
  • Tiempo para mantener y depurar la pipeline

Capgo Construye para CI/CD por Capgo

No mantener Fastlane, ejecutor de Gradle, keystore y script de carga. Capgo Construye realiza compilaciones nativas Android firmadas desde su pipeline CI/CD existente:

  • Funciona con tu pipeline: Desencadena la construcción de Capgo desde GitLab CI, GitHub Actions, Jenkins o scripts locales después de tu construcción web y npx cap sync.
  • La firma desde secretos de CI: Mantén los almacenes de Android, alias de claves, contraseñas y JSON de servicio de consola de Play en tus propios secretos de CI.
  • No mantenimiento de ejecutor nativo: Capgo Build proporciona entornos de construcción de Android mantenidos, por lo que no tienes que gestionar SDK imágenes, problemas de caché de Gradle o rutas de Fastlane.
  • Artículos y presentación: Descarga los artículos firmados para QA o presenta los lanzamientos a través de la Capgo CLI.

Precio

  • : Los planes de Capgo comienzan en $12/mes
  • : Incluye actualizaciones OTA y alrededor de 15 construcciones nativas por mes
  • : Los minutos adicionales de construcción se facturan por minuto a través de créditos

Configura Capgo Build en CI/CD

Guía de configuración manual

Esto es lo que debes hacer:

Pasos a seguir en el post

  1. Copia archivos Fastlane
  2. Almacenar tus secretos en secretos cifrados de GitLab
  3. Crear y almacenar la clave de servicio de Google Play
  4. Almacenar tu clave de firma de Android
  5. Configura tu archivo de flujo de trabajo de GitLab (.yml)

1. Copia archivos Fastlane

Fastlane es una biblioteca de Ruby creada para automatizar tareas comunes de desarrollo móvil. Al utilizar Fastlane, puedes configurar carriles personalizados que agrupan una serie de acciones que realizan tareas que normalmente realizarías utilizando Android Studio. Puedes hacer mucho con Fastlane, pero para los propósitos de este tutorial, utilizaremos solo una pequeña cantidad de acciones básicas.

Crear un carpeta Fastlane en la raíz de tu proyecto y copia los siguientes archivos: 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

Almacenar tus secretos en variables de GitLab CI/CD

GitLab proporciona una forma de almacenar variables de CI/CD cifradas, similar a los secretos de repositorio de GitHub . Para almacenar tus información sensible de manera segura.

  1. Vaya a los ajustes de su proyecto de GitLab.
  2. Navegue a CI/CD > Variables
  3. Agregar las siguientes variables:
  • ANDROID_KEYSTORE_FILE: el archivo base64 codificado .jks o .keystore ¿Qué plugins o características de Appflow utilizar?
  • el archivo utilizado para firmar tus builds de Android. Esto será el archivo de keystore asociado con tu clave de carga (si estás utilizando la firma de Play App), o tu clave de firma de la aplicación.
  • KEYSTORE_KEY_PASSWORD: la contraseña asociada con el archivo de keystore
  • KEYSTORE_KEY_ALIAS: el alias del keystore
  • KEYSTORE_STORE_PASSWORD: la contraseña de la clave privada de la aplicación de Android como com.example.app
  • PLAY_CONFIG_JSON: La clave JSON de cuenta de servicio codificada en base64.

Crear una clave de servicio de Google Play

Para generar el PLAY_CONFIG_JSON segredo, sigue estos pasos:

  1. Ve a la Consola de Cloud de Google
  2. Crear un nuevo proyecto o seleccionar uno existente
  3. Habilitar el desarrollador de Android de Google Play API
  4. Crear una cuenta de servicio:
    • Ve a “IAM & Admin” > “Cuentas de servicio”
    • Haz clic en “Crear cuenta de servicio”
    • Dale un nombre y una descripción
    • Haga clic en "Crear y continuar"
    • Saltarse la asignación de roles y hacer clic en "Hecho"
  5. Generar una clave JSON:
    • Encuentre su cuenta de servicio en la lista
    • Haga clic en el menú de tres puntos > "Administrar claves"
    • Haga clic en "Agregar clave" > "Crear nueva clave"
    • Elige el formato JSON
    • Haga clic en "Crear"
  6. Otorgar acceso a la cuenta de servicio a su aplicación en el Console de Play:
    • Vaya a Console de Play
    • Navegue a "Usuarios y permisos"
    • Click en ‘Invitar nuevos usuarios’
    • Introduzca el correo electrónico de la cuenta de servicio (que termina con @*.iam.gserviceaccount.com)
    • Conceda la ‘permiso de liberación a producción’
    • Click en ‘Invitar usuario’
  7. Convierta la clave JSON a base64:
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. Agregue la cadena base64 codificada como la PLAY_CONFIG_JSON variable en GitLab

Configuración de la Pipelina de CI/CD de GitLab

Crear un archivo .gitlab-ci.yml en la raíz de su proyecto para definir su pipelina de CI/CD. A continuación, se muestra un ejemplo de cómo estructurar su pipelina:


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

Activar la Pipelina

Cuando suba una nueva etiqueta a su repositorio de GitLab, la pipelina de CI/CD de GitLab se activará automáticamente, lo que provocará que se construya y se despliegue su aplicación Android utilizando Fastlane.

Asegúrese de ajustar los caminos y dependencias según la estructura y requisitos de su proyecto. Esta configuración le ayudará a automatizar el despliegue de su aplicación Android en la pipelina de CI/CD de GitLab.

Conclusión

Al configurar GitLab CI/CD con la imagen de Docker mingc/android-build-box, puede automatizar el proceso de compilación de la aplicación Android, lo que hace que su flujo de trabajo de desarrollo sea más eficiente y confiable. Esta automatización libera su tiempo para centrarse en los aspectos clave del desarrollo de aplicaciones, lo que le ayuda a entregar aplicaciones Android de alta calidad de manera más eficiente.

Keep going from Automatic Capacitor Android build with GitLab

Si está utilizando Automatic Capacitor Android build with GitLab para planificar la automatización de CI/CD, conecte con Capgo CI/CD para el flujo de trabajo del producto en Capgo CI/CD Capgo Builds nativos para el flujo de trabajo del producto en Capgo Builds nativos Capgo Integraciones for the product workflow in Capgo Integrations, Integración CI/CD para los detalles de implementación en Integración CI/CD, y GitHub Integración de Acciones para los detalles de implementación en GitHub Integración de Acciones.

Actualizaciones en vivo para aplicaciones Capacitor

Cuando un error en la capa de web está en vivo, envía la corrección a través de Capgo en lugar de esperar días a la aprobación de la tienda de aplicaciones. Los usuarios reciben la actualización en segundo plano mientras que los cambios nativos siguen en el camino de revisión normal.

soporte humano de Martin

Comienza Ahora

Últimas noticias de nuestro Blog

Capgo te brinda las mejores herramientas para crear una aplicación móvil profesional.