Bangun Android secara Otomatis dengan GitLab CI
Mengatur CI/CD untuk aplikasi Capacitor dapat rumit dan memakan waktu. Berikut ini yang perlu Anda ketahui:
Persyaratan
Sebelum memulai, Anda perlu mengatur:
- Akun GitLab dengan akses admin
- Aplikasi Anda sudah dipublikasikan di Google Play Store dengan tanda tangan yang tepat
- Kunci tanda tangan Android dan file keystore
- Proyek Google Cloud Console dengan Play Store API diaktifkan
- Akun layanan dengan hak akses yang tepat
- Pengertian tentang alur kerja GitLab CI/CD
- Pengenalan tentang konfigurasi Fastlane
- Waktu untuk memelihara dan mengdebug pipeline
Capgo Bangun untuk CI/CD oleh Capgo
Lebihkan Fastlane, runner Gradle, keystore, dan upload-script pemeliharaan. Capgo Bangun Melakukan bangun native Android yang ditandatangani dari pipeline CI/CD yang ada:
- Kompatibel dengan pipeline Anda: Aktifkan Capgo Bangun dari GitLab CI, GitHub Actions, Jenkins, atau skrip lokal setelah bangun web Anda
npx cap sync. - Signing dari CI rahasia: Simpan keystore Android, alias kunci, kata sandi, dan JSON akun layanan Console Play di rahasia CI Anda sendiri.
- Tidak ada perawatan pengguna native: Capgo Build menyediakan lingkungan pembangunan Android yang dipelihara, sehingga Anda tidak perlu mengelola SDK gambar, masalah cache Gradle, atau jalur Fastlane.
- Benda dan pengiriman: Unduh benda-benda yang ditandatangani untuk QA atau kirimkan rilis melalui Capgo CLI.
Harga
- Rencana Capgo mulai dari $12/bulan
- Termasuk pembaruan OTA dan sekitar 15 pembangunan native per bulan
- Menit pembangunan tambahan dikenakan biaya per menit melalui kredit
Panduan Setup Manual
Berikut apa yang perlu Anda lakukan:
Langkah-langkah untuk diikuti dalam postingan ini
- Membuat salinan file Fastlane
- Menyimpan rahasia Anda di GitLab rahasia yang dienkripsi
- Membuat dan menyimpan kunci layanan Google Play
- Menyimpan kunci tanda tangan Android
- Mengatur alur kerja GitLab .yml file
1. Membuat salinan file Fastlane
Fastlane adalah sebuah library Ruby yang dibuat untuk mengotomasi tugas pengembangan mobile yang umum. Dengan menggunakan Fastlane, Anda dapat mengonfigurasi jalur kustom yang dapat menggabungkan serangkaian aksi yang melakukan 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.
- Pergi ke pengaturan proyek GitLab Anda.
- Navigasikan ke CI/CD > Variabel
- Tambahkan variabel-variabel berikut:
- ANDROID_KEYSTORE_FILE: kode base64 yang dienkripsi
.jksatau.keystorefile yang digunakan untuk menandatangani bangun Android Anda. Ini akan berupa file keystore yang terkait dengan kunci unggah Anda (jika menggunakan Play App Signing), atau kunci penandatangan aplikasi Anda. - KEYSTORE_KEY_PASSWORD: kata sandi yang 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
- PLAY_CONFIG_JSON: Kunci layanan akun JSON yang dienkripsi base64.
Membuat Kunci Layanan Google Play
Untuk menghasilkan PLAY_CONFIG_JSON rahasia, ikuti langkah-langkah ini:
- Pergi ke Google Cloud Console
- Buat proyek baru atau pilih salah satu yang sudah ada
- Aktifkan Google Play Android Developer API
- Buat akun layanan:
- Pergi ke “IAM & Admin” > “Akun Layanan”
- Klik “Buat Akun Layanan”
- Berikan nama dan deskripsi
- Klik “Buat dan Lanjutkan”
- Lewati pengaturan peran dan klik “Selesai”
- Membuat kunci JSON:
- Cari akun layanan di daftar
- Klik menu tiga titik > ‘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 (akhiran dengan @*.iam.gserviceaccount.com)
- Berikan izin untuk memungutkan ke produksi
- Klik “Undang pengguna”
- Mengubah kunci JSON ke base64:
base64 -i path/to/your/service-account-key.json | pbcopy - Tambahkan string base64 yang telah dikodekan sebagai
PLAY_CONFIG_JSONvariabel di GitLab
Konfigurasi Pipa CI/CD Anda di GitLab
Buat file .gitlab-ci.yml di root proyek Anda untuk mendefinisikan 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 memasukkan tag baru ke repository GitLab Anda, 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 mengotomasi proses mendeploy aplikasi Android di GitLab CI/CD.
Kesimpulan
Dengan mengkonfigurasi GitLab CI/CD dengan gambar Docker mingc/android-build-box, Anda dapat mengotomasi proses pembangunan aplikasi Android, sehingga membuat alur kerja pengembangan Anda 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 Pembangunan Otomatis Android dengan GitLab Capacitor
Jika Anda menggunakan Pembangunan Otomatis Android dengan GitLab Capacitor untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo Otomatisasi 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 di Capgo Integrasi, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, Aksi Integrasi GitHub untuk detail implementasi di Aksi Integrasi GitHub.