Langsung ke konten utama
CI/CD

Build Android Capacitor otomatis dengan GitHub Actions

Cara menyiapkan pipeline CI/CD untuk aplikasi Android Capacitor Anda menggunakan fastlane dan GitHub Actions dalam 5 menit

Build Android otomatis dengan Capacitor GitHub actions Capgo ilustrasi blog

Menyiapkan CI/CD untuk aplikasi Capacitor bisa jadi rumit dan memakan waktu. Berikut yang perlu Anda ketahui:

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

Setup Capgo Build di CI/CD

Panduan Setup Manual

Berikut langkah-langkah yang perlu Anda lakukan:

Harga GitHub Actions

Harga GitHub Action

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

  1. Buat Android Keystore
  2. Siapkan Google Play Service Account
  3. Siapkan Fastlane
  4. Konfigurasikan secret GitHub
  5. 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 sebagai KEYSTORE_KEY_ALIAS
    • Kata sandi keystore - Anda akan membutuhkannya sebagai KEYSTORE_STORE_PASSWORD
    • Password key - Anda akan memerlukannya untuk KEYSTORE_KEY_PASSWORD
  • 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

  1. Buka Google Cloud Console
  2. Buat project baru atau pilih yang sudah ada
  3. Catat project ID

Langkah 2.2: Aktifkan Google Play Developer API

  1. Di Google Cloud Console, buka API & Layanan → Library
  2. Cari “Google Play Android Developer API”
  3. Klik Aktifkan

Langkah 2.3: Buat Service Account

  1. Buka IAM & Admin → Akun Layanan
  2. Klik Buat Service Account
  3. Masukkan detail:
    • Nama: github-actions-uploader
    • Deskripsi: “Service account untuk GitHub Actions guna upload build”
  4. Klik Buat dan Lanjutkan
  5. Lewati penetapan role untuk saat ini (klik Lanjutkan, lalu Selesai)

Langkah 2.4: Buat Service Account Key

  1. Klik service account yang baru dibuat
  2. Buka Kunci tab
  3. Klik Tambahkan Kunci → Buat kunci baru
  4. Pilih JSON yang
  5. Klik Buat
  6. File JSON akan diunduh - simpan dengan aman, Anda membutuhkannya nanti

Langkah 2.5: Berikan Akses di Play Console

  1. Buka Google Play Console
  2. Buka Setup → Akses API
  3. Di bawah Service account, klik Berikan akses untuk service account Anda
  4. Pada tab Izin aplikasi , tambahkan aplikasi Anda
  5. 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
  6. Klik Undang pengguna
  7. 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

  1. Buka repositori Anda di GitHub
  2. Klik Pengaturan → Secrets dan variables → Aksi
  3. Klik Secret repositori baru

Langkah 4.2: Tambahkan Secret yang Diperlukan

Tambahkan setiap secret ini satu per satu:

PLAY_CONFIG_JSON

  1. Ambil file JSON service account yang Anda unduh di Langkah 2.4
  2. 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
  1. Buat secret baru bernama PLAY_CONFIG_JSON dan tempelkan string base64-nya

ANDROID_KEYSTORE_FILE

  1. 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
  1. Buat secret baru bernama ANDROID_KEYSTORE_FILE dan 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

  1. Buat Git tag untuk memicu workflow
  2. GitHub Actions mem-build aplikasi Anda
  3. Fastlane mengupload-nya ke channel beta Google Play
  4. 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

Panduan Setup CI/CD

Platform CI/CD Alternatif

Live Updates & Deployment

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.

Live updates untuk aplikasi Capacitor

Saat bug web-layer sudah live, kirim perbaikannya lewat Capgo alih-alih menunggu berhari-hari untuk persetujuan app store. Pengguna mendapat update di background, sementara perubahan native tetap mengikuti jalur review normal.

Terbaru dari Blog kami

Capgo memberikan insight terbaik yang Anda butuhkan untuk membuat aplikasi mobile yang benar-benar profesional.