Pindah ke konten utama
CI/CD

Automatic Capacitor Android build with GitLab

Bagaimana mengatur pipeline CI/CD untuk aplikasi Android Ionic Anda menggunakan fastlane dan GitLab dalam 5 menit

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Pengedit

Automatic Capacitor Android build dengan GitLab

Automatic Build Android dengan GitLab CI

Pengaturan CI/CD untuk aplikasi Capacitor dapat rumit dan memakan waktu. Berikut adalah hal-hal yang perlu Anda ketahui:

Prerequisites

Sebelum memulai, Anda perlu mengatur:

  • Akun GitLab dengan akses administrator
  • Aplikasi Anda sudah dipublikasikan di Google Play Store dengan tanda tangan yang tepat
  • Kunci tanda tangan Android dan file keystore
  • Project Google Cloud Console dengan Play Store API diaktifkan
  • Akun layanan dengan izin yang tepat
  • Memahami alur kerja GitLab CI/CD
  • Pengetahuan tentang konfigurasi Fastlane
  • Waktu untuk memelihara dan mengdebug pipeline

Capgo Build untuk CI/CD oleh Capgo

Menghindari pelestarian Fastlane, runner Gradle, keystore, dan skrip unggah. Capgo Build membuat bangun native Android yang ditandatangani dari aliran CI/CD yang sudah ada

  • Bekerja sama dengan pipeline AndaTrigger Capgo Build dari GitLab CI, GitHub Actions, Jenkins, atau skrip lokal setelah build web Anda npx cap sync.
  • Berfungsi dengan pipeline Anda: Aktifkan __CAPGO_KEEP_0__ Build dari GitLab CI, __CAPGO_KEEP_1__ Actions, Jenkins, atau skrip lokal setelah build web Anda dan
  • Tanda tangan dari rahasia CI: Capgo Build menyediakan lingkungan pembangunan Android yang terawat, sehingga Anda tidak perlu mengelola SDK gambar, masalah cache Gradle, atau jalur Fastlane.
  • Artikel dan pengiriman: Unduh artefak yang ditandatangani untuk QA atau kirimkan rilis build melalui Capgo CLI.

Paket Harga

  • Capgo plans start at $12/month
  • Termasuk pembaruan OTA dan sekitar 15 bangun asli per bulan
  • Menit pembangunan tambahan dikenakan biaya per menit melalui kredit

Atur Capgo Build di CI/CD

Petunjuk Pengaturan Manual

Berikut apa yang perlu Anda lakukan:

Langkah-langkah yang perlu diikuti dalam artikel ini

  1. : Atur __CAPGO_KEEP_0__ Build di CI/CD
  2. Menyimpan rahasia Anda di GitLab rahasia yang dienkripsi
  3. Membuat & menyimpan kunci layanan Google Play
  4. Menyimpan kunci tanda tangan Android Anda
  5. Mengatur alur kerja GitLab Anda file .yml

1. Salin file Fastlane

Fastlane adalah sebuah library Ruby yang dibuat untuk mengotomatisasi tugas pengembangan mobile yang umum. Dengan menggunakan Fastlane, Anda dapat mengonfigurasi jalur kustom yang dapat menggabungkan serangkaian aksi yang melakukan tugas-tugas yang biasanya Anda lakukan menggunakan Android Studio. Anda dapat melakukan banyak hal dengan Fastlane, tetapi untuk tujuan tutorial ini, kita hanya akan menggunakan beberapa aksi inti.

Buat folder Fastlane di root project Anda dan salin file-file berikut: 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

Menyimpan Rahasia Anda di Variabel CI/CD GitLab

GitLab menyediakan cara untuk menyimpan variabel CI/CD yang dienkripsi, mirip dengan GitHub’s repository rahasia. Untuk menyimpan informasi sensitif Anda secara aman.

  1. Pergi ke pengaturan proyek GitLab Anda.
  2. Navigasikan ke CI/CD > Variabel
  3. Tambahkan variabel-variabel berikut:
  • ANDROID_KEYSTORE_FILE: file kebase64 yang terkodifikasi .jks or .keystore file used to sign your Android builds. This will either be the keystore file associated with your upload key (if using Play App Signing), or your app signing key.
  • KEYSTORE_KEY_PASSWORD: kata sandi yang terkait dengan file keystore
  • KEYSTORE_KEY_ALIAS: alias penyimpanan kunci
  • KEYSTORE_STORE_PASSWORD: kata sandi kunci pribadi
  • DEVELOPER_PACKAGE_NAME: ID aplikasi Android Anda seperti com.example.app
  • PLAY_CONFIG_JSON: Kunci JSON layanan base64 yang telah di-encode

Membuat Kunci Layanan Google Play

Untuk menghasilkan PLAY_CONFIG_JSON rahasianya, ikuti langkah-langkah berikut:

  1. Pergi ke Google Cloud Console
  2. Buat proyek baru atau pilih proyek yang sudah ada
  3. Aktifkan Pengembang Android Google Play API
  4. Buat akun layanan:
    • Pergi ke “IAM & Admin” > “Akun Layanan”
    • Klik “Buat Akun Layanan”
    • Berikan nama dan deskripsi
    • Klik “Buat dan Lanjutkan”
    • Lebihkan peran pengguna dan klik “Selesai”
  5. Generasi kunci JSON:
    • Cari akun layanan Anda di daftar
    • Klik menu tiga titik > “Kelola kunci”
    • Klik "Tambah Kunci" > "Buat kunci baru"
    • Pilih format JSON
    • Klik "Buat"
  6. Berikan akses akun layanan ke aplikasi Anda di Console Play:
    • Pergi ke Console Play
    • Navigasikan ke "Pengguna dan izin"
    • Klik "Undang pengguna baru"
    • Masukkan alamat email akun layanan (berakhir dengan @*.iam.gserviceaccount.com)
    • Berikan izin "Rilis ke produksi"
    • Klik "Undang pengguna"
  7. Konversi kunci JSON ke base64:
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. Tambahkan string base64 yang dikodekan sebagai PLAY_CONFIG_JSON variabel di GitLab

Konfigurasi Pipa CI/CD GitLab

Buat file .gitlab-ci.yml di root proyek Anda untuk mendefinisikan pipa CI/CD. Berikut adalah contoh struktur pipa yang dapat Anda gunakan:


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

Trigger the Pipeline

Setiap kali Anda mengirimkan tag baru ke repository GitLab, GitLab CI/CD akan secara otomatis mengaktifkan pipa yang telah ditentukan, yang akan membangun dan mendeploykan aplikasi Android menggunakan Fastlane.

Pastikan untuk menyesuaikan jalur dan dependensi sesuai dengan struktur dan kebutuhan proyek Anda. Konfigurasi ini akan membantu Anda mengotomatisasi proses deployment aplikasi Android di GitLab CI/CD.

Kesimpulan

Dengan mengonfigurasi GitLab CI/CD menggunakan gambar Docker mingc/android-build-box, Anda dapat mengotomatisasi proses pembangunan aplikasi Android, membuat alur kerja pengembangan lebih efisien dan dapat diandalkan. Otomatisasi ini akan membebaskan waktu Anda untuk fokus pada aspek inti pengembangan aplikasi, sehingga membantu Anda mengirimkan aplikasi Android berkualitas tinggi lebih efisien.

Teruskan dari Automatic Capacitor Android build dengan GitLab

Jika Anda menggunakan Automatic Capacitor Android build dengan GitLab untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo CI/CD untuk alur kerja produk di Capgo Otomatisasi CI/CD, Capgo Pembangunan Nativ untuk alur kerja produk di Capgo Pembangunan Nativ, Capgo Integrasi untuk alur kerja produk dalam Integrasi Capgo untuk alur kerja produk di __CAPGO_KEEP_0__ Integrasi, untuk detail implementasi di Integrasi CI/CD, dan GitHub Actions Integration Untuk detail implementasi di GitHub Integrasi Aksi.

Update Langsung untuk Aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo bukan menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Dukungan Manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi seluler yang profesional.