Home __CAPGO_KEEP_0__
CI/CD

Automatic Capacitor Android build with GitLab

Come configurare una pipeline CI/CD per il tuo'app Android Ionic utilizzando fastlane e GitLab in 5 minuti

Anik Dhabal Babu

Anik Dhabal Babu

Content Marketer

Automatic Capacitor Android build with GitLab

Costruzioni Android automatiche con GitLab CI

La configurazione della CI/CD per le app Capacitor può essere complessa e richiede molto tempo. Ecco cosa devi sapere:

Prerequisiti

Ecco cosa devi fare prima di iniziare:

  • A conto GitLab con accesso amministrativo
  • La tua app già pubblicata su Google Play Store con firma corretta
  • Chiave di firma Android e file del keystore
  • Progetto Google Cloud Console con API di Store Play abilitato
  • Account di servizio con autorizzazioni corrette
  • Comprensione dei flussi di lavoro CI/CD di GitLab
  • Conoscenza della configurazione di Fastlane
  • Tempo per mantenere e debuggare il flusso di lavoro

Capgo Costruisci per CI/CD da Capgo

Saltare la manutenzione di Fastlane, Gradle runner, keystore e upload-script. Capgo Costruisci esegue costruzioni native Android firmate per dispositivi da tuo flusso di lavoro CI/CD esistente:

  • Funziona con il tuo pipeline: Attiva la Capgo costruzione da GitLab CI, GitHub azioni, Jenkins o script locali dopo la tua costruzione web e npx cap sync.
  • La firma da segreti CI: Mantieni le chiavi Android, gli alias chiave, le password e il file JSON del servizio Console Play nei tuoi segreti CI.
  • No mantenimento del runner nativo: La Capgo costruzione fornisce ambienti di costruzione Android mantenuti, quindi non devi gestire SDK immagini, problemi di cache Gradle o tratte Fastlane.
  • Articoli e sottoscrizione: Scarica gli articoli firmati per la QA o invia le versioni di rilascio attraverso il Capgo CLI.

Prenotazione

  • Capgo plans start at $12/month
  • : I piani __CAPGO_KEEP_0__ iniziano da 12€/mese
  • : Includono aggiornamenti OTA e circa 15 costruzioni native al mese. I minuti aggiuntivi di costruzione sono fatturati per minuto attraverso crediti

Configura Capgo Build in CI/CD

Guida di configurazione manuale

Ecco cosa devi fare:

I passaggi da seguire in questo post

  1. Copia i file Fastlane
  2. Memorizza i tuoi segreti in GitLab encrypted secrets
  3. Creazione e memorizzazione della chiave di servizio Google Play
  4. Memorizza la tua chiave di firma Android
  5. Configura il tuo file di workflow GitLab .yml

1. Copia i file Fastlane

Fastlane è una libreria Ruby creata per automatizzare le attività comuni di sviluppo mobile. Utilizzando Fastlane, puoi configurare percorsi personalizzati che raggruppano una serie di 'azioni' che eseguono compiti che normalmente eseguiresti utilizzando Android Studio. Con Fastlane puoi fare molto, ma per gli scopi di questo tutorial, utilizzeremo solo una manciata di azioni di base.

Creare una cartella Fastlane nella radice del tuo progetto e copia 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

Salvare i tuoi segreti in variabili GitLab CI/CD

GitLab fornisce una modalità per memorizzare le variabili CI/CD crittografate, simile a GitHub’s repository secrets. Per memorizzare le tue informazioni sensibili in modo sicuro.

  1. Vai alle impostazioni del tuo progetto GitLab.
  2. Naviga a CI/CD > Variabili
  3. Aggiungi le seguenti variabili:
  • ANDROID_KEYSTORE_FILE: il file base64 codificato .jks o .keystore Contenuto HTML da una stringa UI Capgo più lunga (chiave padre `alternatives_cta_questions`). Pagina/area: pagina di confronto delle alternative per l'aggiornamento live di Capacitor. Ruolo: lungo paragrafo di marketing o legale. Visto in: pagina alternatives.astro. Preservare i termini del prodotto e della marca Capgo esattamente. Chiave messaggio `alternatives_cta_questions` (Domande per l'azione di alternativa). | Contenuto HTML da una stringa UI Capgo più lunga (chiave padre `appflow_cta_questions`). Pagina/area: pagina di confronto e migrazione per Appflow. Ruolo: lungo paragrafo di marketing o legale. Visto in: pagina ionic-appflow.astro. Preservare i termini del prodotto e della marca Capgo esattamente. Chiave messaggio `appflow_cta_questions` (Domande per l'azione di Appflow). | Contenuto HTML da una stringa UI Capgo più lunga (chiave padre `capwesome_cta_questions`). Pagina/area: pagina di confronto di Capawesome. Ruolo: lungo paragrafo di marketing o legale. Visto in: pagina capwesome.astro. Preservare i termini del prodotto e della marca Capgo esattamente. Chiave messaggio `capwesome_cta_questions` (Domande per l'azione di Capawesome). | Contenuto HTML da una stringa UI Capgo più lunga (chiave padre `consulting_faq_subtitle`). Pagina/area: pagina dei servizi di consulenza. Ruolo: sottotitolo o didascalia della sezione. Visto in: pagina consulting.astro. Preservare i termini del prodotto e della marca Capgo esattamente. Chiave messaggio `consulting_faq_subtitle` (Sottotitolo delle domande frequenti per la consulenza). | Pagina/area: pagina di confronto e migrazione per Appflow. Ruolo: breve etichetta o elemento di navigazione. Visto in: pagina ionic-appflow.astro, pagina ionic-enterprise-plugins.astro, pagina soluzioni/ionic-enterprise-plugins.astro. Chiave messaggio `appflow_plugins_or` (Appflow Plugins O).
  • il file utilizzato per firmare le tue build Android. Questo sarà o il file keystore associato alla tua chiave di caricamento (se si utilizza la firma di App Play), o la tua chiave di firma dell'app.
  • KEYSTORE_KEY_PASSWORD: la password associata al file keystore
  • KEYSTORE_KEY_ALIAS: l'alias del keystore
  • KEYSTORE_STORE_PASSWORD: la password della chiave privata del keystore. Il nome del pacchetto dello sviluppatore: 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 della chiave del servizio Google Play

Per generare il PLAY_CONFIG_JSON segreto, segui questi passaggi:

  1. Vai al Console di Google Cloud
  2. Creazione di un nuovo progetto o selezione di uno esistente
  3. Abilita il servizio Google Play Android Developer API
  4. Creazione di un account del servizio:
    • Vai a “IAM & Admin” > “Account del servizio”
    • Clicca su “Crea account del servizio”
    • Dai un nome e una descrizione all'account del servizio
    • Clicca su "Crea e continua"
    • Saltare l'assegnazione del ruolo e clicca su "Fatto"
  5. 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"
  6. Concedi all'account di servizio l'accesso al tuo app nel Console di gioco:
    • Vai a Console di gioco
    • Naviga a "Utenti e autorizzazioni"
    • Clicca su "Invita nuovi utenti"
    • Inserisci l'indirizzo email del servizio (che termina con @*.iam.gserviceaccount.com)
    • Concedi la "permesso di rilascio in produzione"
    • Clicca su "Invita utente"
  7. Converti la chiave JSON in base64:
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. Aggiungi la stringa base64 codificata come variabile in GitLab PLAY_CONFIG_JSON Configura la tua pipeline CI/CD su 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:

Attiva la 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

Quando pubblichi un nuovo tag nel tuo repository di GitLab, la pipeline CI/CD di GitLab si attiverà automaticamente, costruendo e distribuendo la tua app Android con Fastlane.

Assicurati di adattare le percorso e le dipendenze in base alla struttura e alle esigenze del tuo progetto. Questa configurazione ti aiuterà a automatizzare la distribuzione della tua app Android su GitLab CI/CD.

Click “Invite new users”

Conclusion

Configurando GitLab CI/CD con l'immagine Docker mingc/android-build-box, puoi automatizzare il processo di build dell'app Android, rendendo il tuo workflow di sviluppo più efficiente e affidabile. Questa automazione ti consente di dedicare più tempo alle parti centrali dello sviluppo dell'app, aiutandoti a consegnare app Android di alta qualità in modo più efficiente.

Keep going from Automatic Capacitor Android build with GitLab

Se stai utilizzando Automatic Capacitor Android build with GitLab per pianificare l'automazione CI/CD, connettilo con Capgo CI/CD per il workflow del prodotto in Capgo CI/CD Capgo Build nativi per il workflow del prodotto in Capgo Build nativi Capgo Integrazioni for the product workflow in Capgo Integrations, Integrazione CI/CD per i dettagli di implementazione in Integrazione CI/CD, e GitHub Integrazione azioni per i dettagli di implementazione in GitHub Integrazione azioni.

Aggiornamenti in tempo reale per le app Capacitor

Quando si verifica un bug nel layer web, invia la correzione attraverso Capgo invece di attendere giorni per l'approvazione della store. Gli utenti ricevono l'aggiornamento in background mentre le modifiche native rimangono nel normale percorso di revisione.

Sostegno umano da parte di Martin

Avvia subito

Ultimi articoli dal nostro Blog

Capgo vi offre le migliori informazioni che avete bisogno per creare un'app mobile davvero professionale.