Compilaciones de Android automáticas con GitLab CI
Configurando CI/CD para aplicaciones Capacitor puede ser complejo y tiempo consumidor. Aquí está lo que debes saber:
Requisitos previos
Antes de empezar, necesitarás configurar:
- Una cuenta de GitLab con acceso administrativo
- Tu aplicación ya publicada en Google Play Store con firmado correctamente
- Clave de firma de Android y archivos de keystore
- Proyecto de Google Cloud Console con Play Store API habilitado
- Cuenta de servicio con permisos adecuados
- Conocimiento de flujos de trabajo de CI/CD de GitLab
- Conocimiento de la configuración de Fastlane
- Tiempo para mantener y depurar la pipeline
Capgo Construye para CI/CD mediante Capgo
No mantener Fastlane, ejecutor de Gradle, keystore y script de carga. Capgo Construye corre compilaciones nativas Android firmadas desde tu pipeline de CI/CD existente:
- Funciona con tu pipeline: Inicia Capgo Construye desde GitLab CI, GitHub Actions, Jenkins o scripts locales después de tu compilación web y
npx cap sync. - Desde secretos de CI: Mantén los keystore Android, alias de clave, contraseñas y servicio de cuenta de Play Console en tus propios secretos de CI.
- No mantenimiento de ejecutor nativo: Capgo Construye proporciona entornos de compilación Android mantenidos, por lo que no tienes que administrar SDK imágenes, problemas de caché de Gradle o rutas de Fastlane.
- Artículos y envío: Descargar artefactos firmados para QA o enviar builds de liberación a través de Capgo CLI.
Precio
- Planes de Capgo comienzan en $12/mes
- Incluye actualizaciones OTA y aproximadamente 15 builds nativos 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
- Copiar archivos de Fastlane
- Almacenar tus secretos en secretos cifrados de GitLab
- Crear y almacenar tu clave de servicio de Google Play
- Almacenar tu clave de firma de Android
- Configura tu archivo de flujo de trabajo de GitLab (.yml)
1. Copiar archivos de Fastlane
Fastlane es una biblioteca de Ruby creada para automatizar tareas comunes de desarrollo móvil. Utilizando 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 de Fastlane en la raíz de tu proyecto y copiar 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 tu información sensible de manera segura.
- Ir a la configuración de tu proyecto de GitLab.
- Navegar a CI/CD > Variables
- Agregar las siguientes variables:
- ANDROID_KEYSTORE_FILE: el archivo base64 codificado
.jkso.keystoreEl archivo utilizado para firmar tus compilaciones de Android. Esto será el archivo de clave de tu clave de carga (si estás utilizando la firma de aplicaciones de Play), o tu clave de firma de aplicaciones. - KEYSTORE_KEY_PASSWORD: la contraseña asociada con el archivo de clave de la tienda
- KEYSTORE_KEY_ALIAS: el alias de la tienda de claves
- KEYSTORE_STORE_PASSWORD: la contraseña de la clave privada
- DEVELOPER_PACKAGE_NAME: tu ID de aplicación de Android como com.example.app
- PLAY_CONFIG_JSON: La clave JSON de servicio base64 codificada.
Crear una clave de servicio de Google Play
Para generar el PLAY_CONFIG_JSON segredo, sigue estos pasos:
- Dirígete a la Consola de Cloud de Google
- Crear un nuevo proyecto o seleccionar uno existente
- Habilite al desarrollador de Android de Google Play API
- Crear una cuenta de servicio:
- Vaya a “IAM & Admin” > “Cuentas de servicio”
- Haga clic en “Crear Cuenta de Servicio”
- Dale un nombre y una descripción
- Haga clic en “Crear y Continuar”
- Pulse “Continuar” sin asignar rol y haga clic en “Hecho”
- Genere 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
- Haz clic en "Crear"
- Otorga acceso al servicio de cuenta a tu aplicación en el Console de Play:
- Ve a Console de Play
- Navega a "Usuarios y permisos"
- Haz clic en "Invitar nuevos usuarios"
- Ingresa el correo electrónico de la cuenta de servicio (termina con @*.iam.gserviceaccount.com)
- Otorga la autorización "Lanzar a producción"
- Haz clic en "Invitar usuario"
- Convierte la clave JSON a base64:
base64 -i path/to/your/service-account-key.json | pbcopy - Agrega la cadena base64 codificada como el
PLAY_CONFIG_JSONvariable en GitLab
Configura tu pipeline CI/CD de GitLab
Crear un archivo .gitlab-ci.yml en la raíz de tu proyecto para definir tu pipeline CI/CD. A continuación, se muestra un ejemplo de cómo estructurar tu 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
Activar la pipeline
Cuando subas una nueva etiqueta a tu repositorio de GitLab, la CI/CD de GitLab activará automáticamente la pipeline definida, que construirá y desplegará tu aplicación Android utilizando Fastlane.
Asegúrate de ajustar los caminos y dependencias según la estructura y requisitos de tu proyecto. Esta configuración te ayudará a automatizar el despliegue de tu aplicación Android en la CI/CD de GitLab.
Conclusión
Al configurar la CI/CD de GitLab con la imagen de Docker mingc/android-build-box, puedes automatizar el proceso de construcción de la aplicación Android, lo que hace que tu flujo de trabajo de desarrollo sea más eficiente y confiable. Esta automatización te permite liberar tiempo para enfocarte en los aspectos clave del desarrollo de aplicaciones, lo que te ayuda a entregar aplicaciones Android de alta calidad de manera más eficiente.
Keep going from Automatic Capacitor Android build with GitLab
Si estás utilizando Automatic Capacitor Android build with GitLab para planificar la automatización de CI/CD, conecta con Capgo CI/CD para el flujo de trabajo del producto en Capgo CI/CD Capgo Compilaciones Nativas para el flujo de trabajo del producto en Capgo Compilaciones Nativas Capgo Integraciones para el flujo de trabajo del producto en Capgo Integraciones Integración CI/CD para el detalle de implementación en Integración CI/CD, y GitHub Integración de Acciones para el detalle de implementación en GitHub Integración de Acciones