Menyiapkan CI/CD untuk aplikasi Capacitor bisa jadi rumit dan memakan waktu. Berikut yang perlu Anda ketahui:
Direkomendasikan untuk Build Baru: Gunakan Capgo Build
Sekarang kami merekomendasikan penggunaan Capgo Build dengan Capgo CLI untuk build native Capacitor. Panduan Fastlane ini dipertahankan untuk tim yang memelihara pipeline GitHub Actions yang sudah ada, tetapi build Android baru sebaiknya menggunakan Capgo CLI agar Anda tidak perlu memelihara Fastlane, Gradle runner, keystore, dan skrip upload sendiri.
Prerequisites
Sebelum memulai, Anda perlu menyiapkan:
- Akun GitHub dengan akses admin
- Aplikasi Anda yang sudah terbit di Google Play Store dengan signing yang benar
- Android signing key dan file keystore
- Proyek Google Cloud Console dengan Play Store API yang sudah diaktifkan
- Service account dengan izin yang sesuai
- Pemahaman tentang workflow GitHub Actions
- Pengetahuan tentang konfigurasi Fastlane
- Waktu untuk memelihara dan debug pipeline
Capgo Build untuk CI/CD oleh Capgo
Tak perlu lagi maintenance Fastlane, Gradle runner, keystore, dan upload-script. Build Capgo menjalankan signed native Android build dari pipeline CI/CD Anda yang sudah ada:
- Kompatibel dengan pipeline Anda: Trigger Capgo Build dari GitHub Actions, GitLab CI, Jenkins, atau script lokal setelah web build Anda dan
npx cap sync. - Signing via CI secrets: Simpan Android keystores, key aliases, password, dan JSON service account Play Console di CI secrets Anda sendiri.
- Tanpa maintenance native runner: Capgo Build menyediakan Android build environment yang terkelola, jadi Anda tidak perlu mengurus SDK images, masalah Gradle cache, atau Fastlane lanes.
- Artifact dan submission: Download signed artifacts untuk QA atau submit release build melalui Capgo CLI.
Harga
- Paket Capgo mulai dari $12/bulan
- Termasuk OTA updates dan sekitar 15 build native per bulan
- Menit build ekstra ditagih per menit lewat credit
Panduan Setup Manual
Berikut langkah-langkah yang perlu Anda lakukan:
Harga GitHub Actions

GitHub Actions menyediakan menit gratis berdasarkan tipe repositori Anda:
- Repositori publik: 2.000 menit/bulan
- Repositori privat: 2.000 menit/bulan (runner Linux)
Untuk proyek privat, biayanya sekitar $0.008/menit. Build biasanya memakan waktu 3-5 menit.
Langkah-langkah Setup Manual
- Buat Android Keystore
- Siapkan Google Play Service Account
- Siapkan Fastlane
- Konfigurasikan secret GitHub
- Buat workflow GitHub Actions
1. Buat Android Keystore
Sebelum Anda dapat menandatangani dan memublikasikan aplikasi Android, Anda perlu membuat file keystore. Ini adalah pengaturan satu kali saja.
Generate Keystore dengan keytool
Jalankan perintah ini di terminal Anda:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Anda akan diminta memasukkan:
- Password Keystore: Pilih password yang kuat (Anda akan membutuhkannya sebagai
KEYSTORE_STORE_PASSWORD) - Password key: Pilih password yang kuat (Anda akan membutuhkannya sebagai
KEYSTORE_KEY_PASSWORD) - Nama, organisasi, dll.: Isi detail Anda
Catatan Penting
-
Simpan nilai ini dengan aman:
- Lokasi file Keystore (misalnya,
my-release-key.keystore) - Alias kunci (mis.,
my-key-alias) - Anda akan membutuhkannya sebagaiKEYSTORE_KEY_ALIAS - Kata sandi keystore - Anda akan membutuhkannya sebagai
KEYSTORE_STORE_PASSWORD - Password key - Anda akan memerlukannya untuk
KEYSTORE_KEY_PASSWORD
- Lokasi file Keystore (misalnya,
-
Cadangkan file keystore: Jika hilang, Anda tidak bisa memperbarui aplikasi yang sudah dipublikasikan
-
Jaga kerahasiaannya: Jangan pernah commit file keystore ke git
-
Simpan dengan aman: Buat beberapa cadangan di lokasi yang aman
Alternatif: Gunakan Keystore yang Ada
Jika Anda sudah memublikasikan aplikasi, Anda harus menggunakan keystore yang sama dengan yang digunakan sebelumnya. Anda dapat menemukannya di:
- Di mesin lokal tempat Anda pertama kali build aplikasi
- Di Play Console → Setup → App signing (jika menggunakan Google Play App Signing)
2. Siapkan Google Play Service Account
Agar GitHub Actions bisa upload build ke Google Play, Anda perlu service account.
Langkah 2.1: Buat Proyek Google Cloud
- Buka Google Cloud Console
- Buat project baru atau pilih yang sudah ada
- Catat project ID
Langkah 2.2: Aktifkan Google Play Developer API
- Di Google Cloud Console, buka API & Layanan → Library
- Cari “Google Play Android Developer API”
- Klik Aktifkan
Langkah 2.3: Buat Service Account
- Buka IAM & Admin → Akun Layanan
- Klik Buat Service Account
- Masukkan detail:
- Nama:
github-actions-uploader - Deskripsi: “Service account untuk GitHub Actions guna upload build”
- Nama:
- Klik Buat dan Lanjutkan
- Lewati penetapan role untuk saat ini (klik Lanjutkan, lalu Selesai)
Langkah 2.4: Buat Service Account Key
- Klik service account yang baru dibuat
- Buka Kunci tab
- Klik Tambahkan Kunci → Buat kunci baru
- Pilih JSON yang
- Klik Buat
- File JSON akan diunduh - simpan dengan aman, Anda membutuhkannya nanti
Langkah 2.5: Berikan Akses di Play Console
- Buka Google Play Console
- Buka Setup → Akses API
- Di bawah Service account, klik Berikan akses untuk service account Anda
- Pada tab Izin aplikasi , tambahkan aplikasi Anda
- Pada tab Account permissions tab, berikan izin berikut:
- Lihat info aplikasi dan unduh laporan massal (hanya baca)
- Buat, edit, dan hapus draf aplikasi
- Rilis aplikasi ke jalur pengujian
- Rilis aplikasi ke produksi, pengecualian, dan jalur lainnya
- Klik Undang pengguna
- Klik Kirim undangan
Langkah 2.6: Verifikasi JSON Key
File JSON yang diunduh seharusnya terlihat seperti ini:
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "...",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "github-actions-uploader@your-project-id.iam.gserviceaccount.com",
"client_id": "...",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "..."
}
Anda akan mengonversinya ke base64 pada langkah penyiapan secrets GitHub.
3. Siapkan Fastlane
Buat file fastlane folder di root proyek Anda dan tambahkan Fastfile dengan isi berikut:
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'])
# Get previous build number and increment
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}")
# Build the app
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
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
end
4. Konfigurasi Secrets GitHub
Setelah Anda memiliki keystore dan JSON service account, Anda perlu menyimpannya dengan aman di GitHub.
Langkah 4.1: Akses Secrets GitHub
- Buka repositori Anda di GitHub
- Klik Pengaturan → Secrets dan variables → Aksi
- Klik Secret repositori baru
Langkah 4.2: Tambahkan Secret yang Diperlukan
Tambahkan setiap secret ini satu per satu:
PLAY_CONFIG_JSON
- Ambil file JSON service account yang Anda unduh di Langkah 2.4
- Konversi ke base64:
Di macOS/Linux:
base64 service_account_key.json | pbcopy
Di Windows (PowerShell):
[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
- Buat secret baru bernama
PLAY_CONFIG_JSONdan tempelkan string base64-nya
ANDROID_KEYSTORE_FILE
- Konversi keystore Anda ke base64:
Di macOS/Linux:
base64 my-release-key.keystore | pbcopy
Di Windows (PowerShell):
[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
- Buat secret baru bernama
ANDROID_KEYSTORE_FILEdan tempelkan string base64-nya
KEYSTORE_KEY_ALIAS
Buat secret baru dengan key alias yang Anda gunakan saat membuat keystore (misalnya, my-key-alias)
PASSWORD_KUNCI_KEYSTORE
Buat secret baru dengan key password yang Anda atur saat membuat keystore
KEYSTORE_STORE_PASSWORD
Buat secret baru dengan keystore password yang Anda atur saat membuat keystore
DEVELOPER_PACKAGE_NAME
Buat secret baru dengan package name aplikasi Anda (contoh: com.example.app)
Anda bisa menemukan package name di android/app/build.gradle di bawah applicationId
Langkah 4.3: Verifikasi Semua Secret
Pastikan Anda sudah mengonfigurasi 6 secret ini:
- ✅ PLAY_CONFIG_JSON
- ✅ ANDROID_KEYSTORE_FILE
- ✅ KEYSTORE_KEY_ALIAS
- ✅ KEYSTORE_KEY_PASSWORD
- ✅ KEYSTORE_STORE_PASSWORD
- ✅ DEVELOPER_PACKAGE_NAME
5. Buat Workflow GitHub Actions
Buat .github/workflows/build-upload-android.yml:
name: Build and Deploy Android App
on:
push:
tags:
- '*'
jobs:
build_android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build app
run: npm run build
- name: Sync Capacitor
run: npx cap sync
- name: Setup Java
uses: actions/setup-node@v5
with:
distribution: 'zulu'
java-version: '17'
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: Run Fastlane
uses: maierj/fastlane-action@v3.1.0
env:
PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}
ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
DEVELOPER_PACKAGE_NAME: ${{ secrets.DEVELOPER_PACKAGE_NAME }}
KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
with:
lane: android beta
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: android-release
path: ./android/app/build/outputs/bundle/release/app-release.aab
retention-days: 10
Cara Kerjanya
- Buat Git tag untuk memicu workflow
- GitHub Actions mem-build aplikasi Anda
- Fastlane mengupload-nya ke channel beta Google Play
- Aplikasi Anda diperbarui secara otomatis
Waktu Build dan Biaya
- Waktu build: 3-5 menit
- Biaya repo privat: ~$0.04 per build
- Gratis untuk proyek open-source
Artikel Terkait
Panduan Setup CI/CD
- Build iOS Capacitor Otomatis dengan GitHub Actions - Setup CI/CD iOS lengkap
- Build dan Release Otomatis dengan GitHub Actions - Tutorial pipeline CI/CD lengkap
- Kelola Build Dev dan Prod dengan GitHub Actions - Manajemen environment
Platform CI/CD Alternatif
- Build dengan GitLab CI - Alternatif GitLab untuk Android
- Build dengan CodeMagic - Panduan setup CodeMagic
Live Updates & Deployment
- Dokumentasi Capgo Live Updates - Tambahkan update OTA ke aplikasi Anda
- Integrasi CI/CD dengan Capgo - Integrasikan live updates ke pipeline Anda
Sumber Daya
Lanjutkan dengan Automatic Capacitor Android build menggunakan GitHub actions
Jika Anda menggunakan Build Android Capacitor otomatis dengan GitHub Actions untuk merencanakan otomatisasi CI/CD, hubungkan dengan CI/CD Capgo untuk workflow produk di Capgo CI/CD, Capgo Native Build untuk workflow produk di Capgo Native Builds, Integrasi Capgo untuk alur kerja produk di Integrasi Capgo, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan Integrasi GitHub Actions untuk detail implementasi di Integrasi GitHub Actions.