Costruzione automatica di Android con GitLab CI
La configurazione della CI/CD per le app Capacitor può essere complessa e richiede molto tempo. Ecco cosa devi sapere:
Prerequisiti
Prima di iniziare, avrai bisogno di:
- Un account GitLab con accesso amministrativo
- L'app già pubblicata sul Google Play Store con firma corretta
- Chiave di firma Android e file del keystore
- Progetto Google Cloud Console con la pubblicazione su Play Store API abilitata
- Account di servizio con autorizzazioni corrette
- Conoscenza dei flussi di lavoro di GitLab CI/CD
- Conoscenza della configurazione di Fastlane
- Tempo per mantenere e debuggare il pipeline
Capgo Costruzione per CI/CD da Capgo
Svuota la manutenzione di Fastlane, Gradle runner, keystore e upload-script. Capgo Costruzione __CAPGO_KEEP_0__ Costruzione esegue costruzioni native Android firmate a partire dalla tua pipeline CI/CD esistente:
- Funziona con la tua pipeline: Trascina Capgo Costruzione da GitLab CI, GitHub Actions, Jenkins o script locali dopo la costruzione web e
npx cap sync. - Firma da segreti CI: Mantieni le chiavi Android, gli alias chiave, le password e il file JSON del servizio account Play Console nei tuoi segreti CI.
- Nessuna manutenzione del runner nativo: Capgo Costruzione fornisce ambienti di costruzione Android mantenuti, quindi non devi gestire SDK immagini, problemi di cache Gradle o tratte di Fastlane.
- Articoli e sottoscrizione: Scarica gli articoli firmati per la QA o invia le costruzioni di rilascio attraverso il Capgo CLI.
Prenotazioni
- Capgo piani iniziano da 12 dollari al mese
- Includono aggiornamenti OTA e circa 15 costruzioni native al mese
- Minuti di costruzione extra sono fatturati per minuto attraverso crediti
Configura Capgo Build in CI/CD
Guida di configurazione manuale
Ecco cosa devi fare:
Passaggi da seguire nel post
- Copia i file Fastlane
- Archiviazione dei tuoi segreti in GitLab segreti crittografati
- Creazione e archiviazione della chiave del servizio Google Play
- Archiviazione della tua chiave di firma Android
- Configura il tuo file di flusso di lavoro .yml di GitLab.
1. Copia i file Fastlane.
Fastlane è una libreria Ruby creata per automatizzare le attività comuni di sviluppo mobile. Utilizzando Fastlane, puoi configurare percorsi personalizzati "lanes" che raggruppano una serie di "azioni" che eseguono compiti che normalmente eseguiresti utilizzando Android Studio. Puoi fare molto con Fastlane, ma per gli scopi di questo tutorial, utilizzeremo solo una manciata di azioni fondamentali.
Creare una cartella Fastlane alla radice del tuo progetto e copiare i seguenti file: 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
Riporre le tue chiavi segrete nelle variabili CI/CD di GitLab.
GitLab provides a way to store encrypted CI/CD variables, similar to GitHub’s repository secrets. To store your sensitive information securely.
- Naviga a CI/CD > Variabili.
- Aggiungi le seguenti variabili:
- ANDROID_KEYSTORE_FILE: il file base64 codificato
- o
.jksOppure.keystoreil file utilizzato per firmare le tue build Android. Questo sarà o il file keystore associato alla tua chiave di caricamento (se si utilizza Play App Signing), o la tua chiave di firma dell'app. - KEYSTORE_KEY_PASSWORD: la password associata al file del keystore
- KEYSTORE_KEY_ALIAS: l'alias del keystore
- KEYSTORE_STORE_PASSWORD: la password della chiave privata
- DEVELOPER_PACKAGE_NAME: il tuo ID dell'app Android come ad esempio com.esempio.app
- PLAY_CONFIG_JSON: La chiave JSON del servizio account codificata in base64.
Creazione di una chiave del servizio Google Play
A generare il PLAY_CONFIG_JSON segreto, segui questi passaggi:
- Vai al Console di Google Cloud
- Crea un nuovo progetto o seleziona uno esistente
- Abilita il Google Play Android Developer API
- Creare un account di servizio:
- Vai a “IAM & Admin” > “Account di servizio”
- Clicca su “Crea Account di Servizio”
- Dagli un nome e una descrizione
- Clicca su “Crea e continua”
- Saltare l'assegnazione del ruolo e clicca su “Fatto”
- Genera una chiave JSON:
- Cerca il tuo account di servizio nella lista
- Clicca sul menu a tre punti > “Gestisci chiavi”
- Clicca su “Aggiungi Chiave” > “Crea nuova chiave”
- Scegli il formato JSON
- Clicca su “Crea”
- Concedi l'accesso all'account del servizio alla tua app nel Console di Google Play:
- Vai a Console di Google Play
- Naviga a "Utenti e autorizzazioni"
- Clicca "Invita nuovi utenti"
- Inserisci l'indirizzo e-mail dell'account del servizio (che termina con @*.iam.gserviceaccount.com)
- Concedi la "Permessi di rilascio in produzione"
- Clicca "Invita utente"
- Converti la chiave JSON in base64:
base64 -i path/to/your/service-account-key.json | pbcopy - Aggiungi la stringa base64 codificata come variabile in GitLab
PLAY_CONFIG_JSONConfigura la tua pipeline CI/CD di GitLab
Imposta la tua pipeline CI/CD di GitLab
Creare un file .gitlab-ci.yml nella radice del tuo progetto per definire la tua pipeline CI/CD. Ecco un esempio di come puoi strutturare la tua 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
Avvia la Pipeline
Quando pubblichi un nuovo tag nel tuo repository GitLab, GitLab CI/CD avvierà automaticamente la pipeline definita, che costruirà e distribuirà il tuo app Android utilizzando Fastlane.
Assicurati di adattare le percorso e le dipendenze in base alla struttura e alle esigenze del tuo progetto. Questa configurazione ti aiuterà ad automatizzare la distribuzione del tuo app Android su GitLab CI/CD.
Conclusioni
Configurando GitLab CI/CD con l'immagine Docker mingc/android-build-box, puoi automatizzare il processo di costruzione dell'app Android, rendendo il tuo workflow di sviluppo più efficiente e affidabile. Questa automazione ti libera dal tempo di concentrarti sui punti chiave dello sviluppo di app, aiutandoti a consegnare app Android di alta qualità in modo più efficiente.
Continua da Automatic Capacitor Android build con GitLab
Se stai utilizzando Automatic Capacitor Android build con GitLab per pianificare l'automazione CI/CD, connettilo con Capgo CI/CD per il workflow del prodotto in Capgo CI/CD, Capgo Costruzioni native per il flusso di lavoro del prodotto in Capgo Costruzioni native Capgo Integrazioni per il flusso di lavoro del prodotto in Capgo Integrazioni Integrazione CI/CD per la dettaglio di implementazione in Integrazione CI/CD, e GitHub Integrazione azioni per la dettaglio di implementazione in GitHub Integrazione azioni