Automatic Android Builds dengan GitLab CI
Pengaturan CI/CD untuk aplikasi Capacitor dapat rumit dan memakan waktu. Berikut adalah hal-hal 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 Play Store API diaktifkan
- Akun layanan dengan izin yang tepat
- Pengertian tentang alur kerja GitLab CI/CD
- Pengenalan tentang konfigurasi Fastlane
- Waktu untuk memelihara dan memperbaiki pipeline
Capgo Membangun untuk CI/CD oleh Capgo
Lepaskan perawatan Fastlane, Gradle runner, keystore, dan upload-script. Capgo Membangun Membangun __CAPGO_KEEP_0__ Build menjalankan bangun native Android yang ditandatangani dari pipeline CI/CD yang sudah ada:
- Bekerja dengan pipeline Anda: Aktifkan Capgo Membangun dari GitLab CI, GitHub Actions, Jenkins, atau skrip lokal setelah bangun web Anda dan
npx cap sync. - Tanda tangan dari rahasia CI: Simpan keystore Android, alias kunci, kata sandi, dan JSON layanan akun Play Console di rahasia CI Anda sendiri.
- Tidak ada perawatan runner native: Capgo Membangun menyediakan lingkungan bangun 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 bangun rilis melalui Capgo CLI.
Harga
- Capgo rencana mulai dari $12/bulan
- Termasuk pembaruan OTA dan sekitar 15 build asli per bulan
- Menit tambahan build akan dikenakan biaya per menit melalui kredit
Petunjuk Pengaturan Manual
Berikut apa yang perlu Anda lakukan:
Langkah-langkah untuk diikuti di postingan
- Salin file Fastlane
- Mengimpan rahasia Anda di GitLab rahasia yang dienkripsi
- Membuat dan mengimpan kunci layanan Google Play
- Mengimpan kunci tanda tangan Android
- Konfigurasi alur kerja GitLab Anda .yml file
1. Salin file-file Fastlane
Fastlane adalah sebuah library Ruby yang dibuat untuk otomatisasi tugas pengembangan mobile yang umum. Dengan menggunakan Fastlane, Anda dapat mengonfigurasi jalur
yang mengumpulkan serangkaian
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
aksi
GitLab provides a way to store encrypted CI/CD variables, similar to GitHub’s repository secrets. To store your sensitive information securely.
- Buat folder Fastlane di root proyek Anda dan salin file-file berikut: Fastlane
- Menyimpan Rahasia Anda di Variabel GitLab CI/CD
- GitLab menyediakan cara untuk menyimpan variabel CI/CD yang dienkripsi, mirip dengan __CAPGO_KEEP_0__’s repository secrets. Untuk menyimpan informasi sensitif Anda secara aman.
- Pergi ke pengaturan proyek GitLab Anda.
.jksNavigasikan ke CI/CD > Variabel.keystoreTambahkan variabel-variabel berikut: , - PASSWORD SANDI KEYS STORE: kata sandi yang terkait dengan file keystore
- ALIAS SANDI KEYS STORE: alias sandi keystore
- PASSWORD SANDI KEYS STORE: kata sandi kunci pribadi
- Nama Paket Pengembang: ID aplikasi Android Anda seperti com.example.app
- PLAY_CONFIG_JSON: Konfigurasi JSON yang dikodekan dengan base64 dari kunci akun layanan.
Membuat Kunci Layanan Google Play
Untuk menghasilkan kunci rahasia, ikuti langkah-langkah berikut: PLAY_CONFIG_JSON Pergi ke
- Console Google Cloud Buat proyek baru atau pilih salah satu yang sudah ada
- Aktifkan Google Play Android Developer __CAPGO_KEEP_0__
- Enable the Google Play Android Developer API
- Buat akun layanan:
- Pergi ke “IAM & Admin” > “Service Accounts”
- Klik “Create Service Account”
- Berikan nama dan deskripsi
- Klik “Create and Continue”
- Lewati pengaturan peran dan klik “Done”
- Buat file JSON kunci:
- Cari akun layanan Anda di daftar
- Klik menu tiga titik > “Manage keys”
- Klik “Add Key” > “Create new key”
- Pilih format JSON
- Klik “Create”
- Berikan akses akun layanan ke aplikasi Anda di Console Play:
- Lihat 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”
- Konversi string JSON ke base64:
base64 -i path/to/your/service-account-key.json | pbcopy - Tambahkan string base64 yang dikodekan sebagai
PLAY_CONFIG_JSONvariabel di GitLab
Tetapkan Pipa CI/CD GitLab Anda
Buatlah file .gitlab-ci.yml di root proyek Anda untuk mendefinisikan pipeline CI/CD Anda. Berikut adalah contoh struktur pipeline 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
Trigger Pipeline
Setiap kali Anda memasukkan tag baru ke repository GitLab Anda, GitLab CI/CD akan secara otomatis memicu pipeline 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 mengonfigurasi GitLab CI/CD dengan gambar Docker mingc/android-build-box, Anda dapat mengotomasi proses pembangunan aplikasi Android, 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.
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 untuk alur kerja produk di Capgo CI/CD, Capgo Native Builds for the product workflow in Capgo Native Builds, Integrasi Capgo untuk alur kerja produk di Integrasi Capgo, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan Integrasi Aksi GitHub untuk detail implementasi di Integrasi Aksi GitHub.