Build Android Otomatis dengan GitLab
Setting up CI/CD for Capacitor apps can be complex and time-consuming. Here’s what you need to know:
Menetapkan CI/CD untuk aplikasi dapat rumit dan memakan waktu. Berikut adalah hal-hal yang perlu Anda ketahui:
Persyaratan Sebelumnya
- Akun GitLab dengan akses admin
- Aplikasi Anda sudah dipublikasikan di Google Play Store dengan tanda tangan yang tepat
- Kunci dan file keystore Android
- Projek Google Cloud Console dengan API Play Store diaktifkan
- Akun layanan dengan izin yang tepat
- Pengertian tentang alur kerja CI/CD GitLab
- Pengenalan konfigurasi Fastlane
- Waktu untuk memelihara dan mengdebug pipeline
Capgo Build untuk CI/CD oleh Capgo
Lebih baik melewatkan Fastlane, runner Gradle, keystore, dan skrip unggah. Capgo Build melakukan build aplikasi Android native yang ditandatangani secara otomatis dari pipeline CI/CD Anda yang sudah ada:
- Berfungsi dengan pipeline Anda: Aktifkan Capgo Pembangunan dari GitLab CI, GitHub Aksi, Jenkins, atau skrip lokal setelah pembangunan web Anda dan
npx cap sync. - Penandatanganan dari rahasia CI: Simpan kunci Android, alias kunci, kata sandi, dan akun layanan Console Play 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.
- Artikel dan pengiriman: Unduh artikel yang ditandatangani untuk QA atau kirimkan rilis melalui Capgo CLI.
Harga
- : Rencana Capgo mulai dari $12/bulan
- : Termasuk pembaruan OTA dan sekitar 15 pembangunan asli per bulan
- : Menit tambahan pembangunan dibebankan berdasarkan menit melalui kredit
Konfigurasi Capgo Build di CI/CD
Panduan Konfigurasi Manual
Ini yang perlu Anda lakukan:
Langkah-langkah yang perlu diikuti dalam postingan ini
- Mengcopy file Fastlane
- Menyimpan rahasia Anda di GitLab rahasia yang dienkripsi
- Membuat & menyimpan kunci layanan Google Play
- Menyimpan kunci tanda tangan Android Anda
- Konfigurasi alur kerja GitLab Anda file .yml
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 dapat 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-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 repository rahasia. Untuk menyimpan informasi sensitif Anda secara aman.
- Pergi ke pengaturan proyek GitLab Anda.
- Navigasikan ke CI/CD > Variabel
- Tambahkan variabel berikut:
- ANDROID_KEYSTORE_FILE: file base64-encode
.jksatau.keystorefile yang digunakan untuk menandatangani bangun Android Anda. Ini akan berupa file keystore yang terkait dengan kunci unggah (jika menggunakan Play App Signing), atau kunci penandatanganan aplikasi Anda. - KEYSTORE_KEY_PASSWORD: kata sandi terkait dengan file keystore
- KEYSTORE_KEY_ALIAS: alias keystore
- KEYSTORE_STORE_PASSWORD: kata sandi kunci pribadi
- DEVELOPER_PACKAGE_NAME: ID aplikasi Android Anda seperti com.example.app
- Konfigurasi MAIN: Kunci akun layanan base64 yang di-encode dalam format JSON.
Membuat Kunci Layanan Google Play
Untuk menghasilkan kunci rahasia, ikuti langkah-langkah berikut: PLAY_CONFIG_JSON Pergi ke Konsol Cloud Google
- Buat proyek baru atau pilih proyek yang sudah ada Aktifkan Google Play Android Developer __CAPGO_KEEP_0__
- Buat akun layanan:
- Enable the Google Play Android Developer API
- Klik “Buat Akun Layanan”
- Berikan nama dan deskripsi untuk akun layanan
- Membuat Kunci Layanan Google Play
- Untuk menghasilkan kunci rahasia, ikuti langkah-langkah berikut:
- Klik ‘Buat dan Lanjutkan’
- Lebihkan peran pengguna dan klik ‘Selesai’
- Generate kunci JSON:
- Cari akun layanan Anda di daftar
- Klik menu titik tiga > ‘Kelola kunci’
- Klik ‘Tambah Kunci’ > ‘Buat kunci baru’
- Pilih format JSON
- Klik ‘Buat’
- 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 (akhiri dengan @*.iam.gserviceaccount.com)
- Berikan izin "Rilis ke produksi"
- Klik "Undang pengguna"
- Konversi kunci JSON ke base64:
base64 -i path/to/your/service-account-key.json | pbcopy - Tambahkan string base64 yang dikodekan sebagai
PLAY_CONFIG_JSONvariabel 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 Anda:
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 repositori GitLab Anda, GitLab CI/CD akan secara otomatis mengaktifkan pipa yang telah ditentukan, yang akan membangun dan menginstal aplikasi Android Anda menggunakan Fastlane.
Pastikan untuk menyesuaikan jalur dan dependensi sesuai dengan struktur dan kebutuhan proyek Anda. Konfigurasi ini akan membantu Anda mengotomatisasi penginstalan aplikasi Android Anda di GitLab CI/CD.
Kesimpulan
Dengan mengonfigurasi GitLab CI/CD menggunakan gambar Docker mingc/android-build-box, Anda dapat mengotomatisasi proses pembangunan aplikasi Android, sehingga membuat alur kerja pengembangan 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.
Keep going from Automatic Capacitor Android build with GitLab
Jika Anda menggunakan Automatic Capacitor Android build with GitLab untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo CI/CD for the product workflow in Capgo CI/CD, Capgo CI/CD Capgo Pembangunan Asli Capgo Integrations Capgo Pembangunan Asli, Integrasi untuk alur kerja produk di Capgo Integrasi Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan GitHub Integrasi Aksi untuk detail implementasi di GitHub Integrasi Aksi