Lompat ke konten utama

Pembangunan Otomatis Android dengan GitLab: Capacitor

Cara Mengatur Pipa Pengintegrasian CI/CD untuk Aplikasi Android Ionic Anda menggunakan fastlane dan GitLab dalam 5 menit

Anik Dhabal Babu

Anik Dhabal Babu

Pengembang Konten

Pembangunan Otomatis Android dengan GitLab: Capacitor

Pembangunan Otomatis Android dengan GitLab CI

Mengatur Pengintegrasian CI/CD untuk Aplikasi Capacitor dapat rumit dan memakan waktu. Berikut adalah apa yang perlu Anda ketahui:

Prasyarat

Sebelum memulai, Anda perlu mengatur:

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

Capgo Bangun untuk CI/CD oleh Capgo

Lepaskan Fastlane, runner Gradle, keystore, dan skrip unggah. Capgo Bangun menghasilkan bangun native Android yang ditandatangani secara otomatis dari pipeline CI/CD yang ada:

  • Berfungsi dengan pipeline Anda: Aktifkan Capgo Pembangunan dari GitLab CI, GitHub Actions, Jenkins, atau skrip lokal setelah pembangunan web Anda dan npx cap sync.
  • Membuat tanda tangan dari rahasia CI: Simpan keystore Android, alias kunci, kata sandi, dan JSON layanan akun Play Console di rahasia CI Anda sendiri.
  • Tidak perlu menjaga runner asli: Capgo Pembangunan menyediakan lingkungan pembangunan Android yang dipelihara, sehingga Anda tidak perlu mengelola SDK gambar, masalah cache Gradle, atau jalur Fastlane.
  • Artefak dan pengiriman: Unduh artefak yang ditandatangani untuk QA atau kirimkan rilis melalui Capgo CLI.

Harga

  • Rencana Capgo mulai dari $12/bulan
  • Menggunakan pembaruan OTA dan sekitar 15 pembangunan asli per bulan
  • Menit pembangunan tambahan dikenakan biaya per menit melalui kredit

Konfigurasi Capgo untuk Dibangun dalam CI/CD

Panduan Konfigurasi Manual

Ini yang perlu Anda lakukan:

Langkah-langkah untuk diikuti dalam postingan

  1. Mengcopy file Fastlane
  2. Menyimpan rahasia Anda di GitLab encrypted secrets
  3. Membuat & menyimpan kunci layanan Google Play
  4. Menyimpan kunci tanda tangan Android
  5. Konfigurasi alur kerja GitLab .yml Anda

1. Mengcopy 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 copy 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 GitLab CI/CD

GitLab menyediakan cara untuk menyimpan variabel CI/CD yang dienkripsi, mirip dengan GitHub’s rahasia repository.

  1. Untuk menyimpan informasi sensitif Anda secara aman.
  2. Pergi ke pengaturan proyek GitLab Anda.
  3. Navigasikan ke CI/CD > Variabel
  • Tambahkan variabel berikut: .jks ANDROID_KEYSTORE_FILE: file base64-encode .keystore atau
  • file yang digunakan untuk menandatangani bangun Android Anda. Ini akan berupa file keystore yang terkait dengan kunci unggah (jika menggunakan Play App Signing), atau kunci penandatangan aplikasi Anda.
  • KEYSTORE_KEY_PASSWORD: kata sandi terkait dengan file keystore
  • KEYSTORE_KEY_ALIAS: alias keystore
  • KEYSTORE_STORE_PASSWORD: kata sandi kunci pribadi Anda
  • PLAY_CONFIG_JSON: Kunci API akun layanan dasar yang dikodekan dalam Base64.

Membuat Kunci Layanan Google Play

Untuk menghasilkan kunci rahasia, ikuti langkah-langkah berikut: PLAY_CONFIG_JSON Pergi ke

  1. Console Cloud Google Buat proyek baru atau pilih salah satu yang sudah ada
  2. Aktifkan Google Play Android Developer __CAPGO_KEEP_0__
  3. Enable the Google Play Android Developer API
  4. Pergi ke “IAM & Admin” > “Akun Layanan”
    • Klik “Buat Akun Layanan”
    • Berikan nama dan deskripsi
    • Tentukan hak akses
    • Klik "Buat dan Lanjutkan"
    • Lepaskan peran dan klik "Selesai"
  5. Buatlah 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:
    • Lihat di Console Play
    • Navigasikan ke "Pengguna dan izin"
    • Klik ‘Undang pengguna baru’
    • Masukkan alamat email akun layanan (akhir 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 Anda di GitLab

Buat file .gitlab-ci.yml di root proyek Anda untuk menentukan pipa CI/CD Anda. 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

Aktifkan Pipa

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

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

["targetLanguage":"Indonesia","protectedTokens":["Cloudflare","Capacitor","GitHub","Capgo","code","API","SDK","CLI","npm","bun"]

["texts":["Kesimpulan","Dengan mengonfigurasi GitLab CI/CD dengan gambar Docker mingc/android-build-box, Anda dapat mengotomatisasi proses pembangunan aplikasi Android, sehingga membuat alur kerja pengembangan Anda lebih efisien dan dapat diandalkan. Otomatisasi ini membebaskan waktu Anda untuk fokus pada aspek inti pengembangan aplikasi, sehingga membantu Anda mengirimkan aplikasi Android berkualitas tinggi lebih efisien.","Lanjutkan dari Pembangunan Aplikasi Android Otomatis dengan GitLab","Jika Anda menggunakan","Pembangunan Aplikasi Android Otomatis dengan GitLab","untuk merencanakan otomatisasi CI/CD, hubungkannya dengan","__CAPGO_KEEP_0__ CI/CD","untuk alur kerja produk di __CAPGO_KEEP_0__ CI/CD,","__CAPGO_KEEP_0__ Pembangunan Asli","untuk alur kerja produk di __CAPGO_KEEP_0__ Pembangunan Asli,","__CAPGO_KEEP_0__ Integrasi","untuk alur kerja produk di __CAPGO_KEEP_0__ Integrasi"]

Keep going from Automatic Capacitor Android build with GitLab

translations Automatic Capacitor Android build with GitLab translations Capgo CI/CD for the product workflow in Capgo CI/CD, Capgo Native Builds for the product workflow in Capgo Native Builds, Capgo Integrations for the product workflow in Capgo Integrations, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan GitHub Integrasi Aksi untuk detail implementasi di GitHub Integrasi Aksi.

Update Hidup 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.

Mulai Sekarang

Terbaru dari Blog Kami

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