Lompat ke konten utama
Integrasi CI/CD

Automatic Capacitor Android build with GitHub actions

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

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Pengedit

Automatic Capacitor Android build with GitHub actions

Menyiapkan CI/CD untuk aplikasi Capacitor dapat kompleks dan memakan waktu. Berikut ini yang perlu Anda ketahui:

Sekarang kami merekomendasikan menggunakan Capgo Build dengan Capgo CLI untuk pembangunan native Capacitor. Petunjuk Fastlane ini dipertahankan untuk tim yang menjaga pipeline aksi GitHub yang sudah ada, tetapi pembangunan Android baru harus menggunakan Capgo CLI sehingga Anda tidak perlu menjaga Fastlane, pengguna Gradle, file keystore, dan skrip unggah sendiri.

Prasyarat

Sebelum memulai, Anda perlu menyiapkan:

  • Akun GitHub dengan akses admin
  • Aplikasi Anda sudah dipublikasikan di Google Play Store dengan tanda tangan yang tepat
  • Kunci tanda tangan Android dan file keystore
  • Project Google Cloud Console dengan API Play Store diaktifkan
  • Akun layanan dengan izin yang tepat
  • Pengertian GitHub Workflows
  • Pengetahuan tentang konfigurasi Fastlane
  • Waktu untuk menjaga dan memperbaiki pipa

Capgo Build untuk CI/CD oleh Capgo

Lebih baik mengabaikan Fastlane, runner Gradle, keystore, dan skrip unggah. Capgo Build melakukan build Android native yang ditandatangani secara otomatis dari pipeline CI/CD yang sudah ada:

  • Kompatibel dengan pipeline Anda: Aktifkan Capgo Build dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah build web Anda dan npx cap sync.
  • Tanda tangan dari rahasia CI: Simpan keystore Android, alias kunci, kata sandi, dan JSON akun layanan Play Console di rahasia CI Anda sendiri.
  • No runner native pemeliharaan: Capgo Build menyediakan lingkungan pembangunan Android yang terjaga, sehingga Anda tidak perlu mengelola SDK gambar, masalah cache Gradle, atau jalur Fastlane.
  • Artikel dan pengiriman: Unduh artefak yang ditandatangani untuk QA atau kirimkan rilis build melalui Capgo CLI.

Harga

  • Kami menawarkan Capgo rencana mulai dari $12/bulan
  • Termasuk pembaruan OTA dan sekitar 15 pembangunan native per bulan
  • Menit pembangunan tambahan dikenakan biaya per menit melalui kredit

Konfigurasi Capgo Build di CI/CD

Petunjuk Pemasangan Manual

Ini yang perlu Anda lakukan:

Harga GitHub Actions

Aksi Harga GitHub

Aksi GitHub menawarkan menit gratis berdasarkan jenis repositori Anda:

  • Repositori publik: 2.000 menit/bulan
  • Repositori pribadi: 2.000 menit/bulan (pengguna Linux)

Untuk proyek pribadi, biaya sekitar $0,008/menit. Pembangunan biasanya memakan waktu 3-5 menit.

Langkah-Langkah Konfigurasi Manual

  1. Buat Keystore Android
  2. Konfigurasi Akun Layanan Google Play
  3. Konfigurasi Fastlane
  4. Konfigurasi rahasia GitHub
  5. Buat alur kerja GitHub

1. Buat Keystore Android

Sebelum Anda dapat menandatangani dan menerbitkan aplikasi Android Anda, Anda perlu membuat file keystore. Ini adalah pengaturan satu kali.

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 untuk:

  • Sandi Keystore: Pilih kata sandi yang kuat (anda akan membutuhkannya sebagai KEYSTORE_STORE_PASSWORD)
  • Sandi Kunci: Pilih kata sandi yang kuat (anda akan membutuhkannya sebagai KEYSTORE_KEY_PASSWORD)
  • Nama Anda, organisasi, dll.: Isi detail Anda

Catatan Penting

  • Simpan nilai-nilai ini dengan aman:

    • Lokasi file keystore (misalnya, my-release-key.keystore)
    • Alias kunci (misalnya, my-key-alias) - Anda memerlukan ini sebagai KEYSTORE_KEY_ALIAS
    • Kata sandi keystore - Anda memerlukan ini sebagai KEYSTORE_STORE_PASSWORD
    • Kata sandi kunci - Anda memerlukan ini sebagai KEYSTORE_KEY_PASSWORD
  • Simpan file keystore dengan aman: Jika Anda kehilangannya, Anda tidak dapat memperbarui aplikasi yang telah dipublikasikan

  • Jaga rahasia: Tidak pernah komit file keystore ke git

  • Simpan dengan aman: Simpan beberapa salinan cadangan di lokasi yang aman

Alternatif: Gunakan Keystore yang Sudah Ada

Jika Anda sudah mempublikasikan aplikasi, Anda harus menggunakan keystore yang sama yang digunakan awalnya. Anda bisa menemukannya:

  • Di mesin lokal Anda di mana Anda pertama kali membangun aplikasi
  • Di Console Play Anda → Pengaturan → Penandatanganan Aplikasi (jika menggunakan Penandatanganan Aplikasi Google Play)

2. Atur Akun Layanan Google Play

Untuk memungkinkan GitHub Actions mengunggah build ke Google Play, Anda membutuhkan akun layanan.

Langkah 2.1: Buat Project Google Cloud

  1. Bergi ke Google Cloud Console
  2. Buat proyek baru atau pilih proyek yang sudah ada
  3. Catat ID proyek

Langkah 2.2: Aktifkan Pengembang Google Play API

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

Langkah 2.3: Buat Akun Layanan

  1. Pergi ke IAM & AdminAkun Layanan
  2. Klik Buat Akun Layanan
  3. Masukkan detail:
    • Nama: github-actions-uploader
    • Deskripsi: “Akun layanan untuk GitHub Aksi untuk mengunggah bangun”
  4. Klik Buat dan Lanjutkan
  5. Lebihkan pengaturan peran untuk sekarang (klik Lanjutkan, kemudian Sudah)

Langkah 2.4: Buat Kunci Akun Layanan

  1. Klik pada akun layanan yang baru dibuat
  2. Pergi ke Kunci tab
  3. Klik Tambah KunciBuat kunci baru
  4. Pilih Format JSON format
  5. Klik Buat
  6. Sebuah file JSON akan diunduh - Simpan hal ini dengan amananda akan membutuhkannya nanti

Langkah 2.5: Berikan Akses di Console Play

  1. Pergi ke Console Play Google
  2. Pergi ke PengaturanAPI akses
  3. Di bawah Akun layanan, klik Berikan akses untuk akun layanan Anda
  4. Pada Izin Aplikasi Tab, tambahkan aplikasi Anda
  5. Pada halaman Izin Akun Tab, berikan izin-izin ini:
    • Lihat informasi aplikasi dan download laporan bulk (hanya baca)
    • Buat, edit, dan hapus aplikasi draft
    • Rilis aplikasi ke jalur pengujian
    • Rilis aplikasi ke produksi, kecuali, dan jalur lainnya
  6. Klik Undang pengguna
  7. Klik Kirim undangan

Langkah 2.6: Verifikasi Kunci JSON

File JSON yang diunduh harus 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 di langkah pengaturan rahasia GitHub.

3. Atur Fastlane

Buat fastlane folder di root proyek Anda dan tambahkan Fastfile dengan isi ini:

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 Rahasia GitHub

Sekarang Anda telah memiliki keystore dan JSON akun layanan, Anda perlu menyimpannya secara aman di GitHub.

Langkah 4.1: Akses Rahasia GitHub

  1. Pergi ke repositori Anda di GitHub
  2. Klik PengaturanRahasia dan variabelAksi
  3. Klik Repository rahasia baru

Langkah 4.2: Tambahkan Rahasia yang Diperlukan

Tambahkan rahasia satu per satu:

PLAY_CONFIG_JSON

  1. Ambil file JSON akun layanan yang Anda download pada Langkah 2.4
  2. Konversi ke base64:

Pada macOS/Linux:

base64 service_account_key.json | pbcopy

On Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
  1. Buat rahasia baru bernama PLAY_CONFIG_JSON Pisahkan string base64

ANDROID_KEYSTORE_FILE

  1. Konversi keystore Anda ke base64:

On macOS/Linux:

base64 my-release-key.keystore | pbcopy

On Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
  1. Buat rahasia baru bernama ANDROID_KEYSTORE_FILE Pisahkan string base64

KEYSTORE_KEY_ALIAS

Buat rahasia dengan alias kunci yang Anda gunakan ketika menghasilkan keystore (misalnya, my-key-alias)

KEYSTORE_KEY_PASSWORD

Buat rahasia baru dengan kunci password yang Anda tetapkan ketika menghasilkan keystore

KEYSTORE_STORE_PASSWORD

Buat rahasia baru dengan password keystore yang Anda tetapkan ketika menghasilkan keystore

NAMA PACKAGES PEMBUAT APLIKASI

Buat rahasia baru dengan nama paket aplikasi Anda (misalnya, com.example.app)

Anda dapat menemukan nama paket Anda di android/app/build.gradle bawah applicationId

Langkah 4.3: Pastikan Semua Rahasia

Pastikan Anda telah mengonfigurasi 6 rahasia ini:

  • ✅ PLAY_CONFIG_JSON
  • ✅ ANDROID_KEYSTORE_FILE
  • ✅ KEYSTORE_KEY_ALIAS
  • ✅ KUNCI SANDI KEYSSTORE
  • ✅ KUNCI SANDI TOKO KEYSSTORE
  • ✅ NAMA PAKET PEMROGRAM

5. Buat GitHub Workflow Aksi

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

Bagaimana Cara Kerjanya

  1. context: Halaman/area: Halaman Pembangun Capgo / produk pembangunan awan asli. Peran: Judul bagian atau halaman. Pesan kunci `native_build_how_it_works_title` (Judul Pembangunan Asli Bagaimana Cara Kerjanya). | Halaman/area: Bagian masalah/solusi halaman utama. Peran: Label UI singkat atau item navigasi. Dilihat di: halaman premium-support.astro. Pesan kunci `ps_how_it_works` (Ps Bagaimana Cara Kerjanya). | Halaman/area: Halaman produk pembaruan hidup. Peran: Judul bagian atau halaman. Dilihat di: halaman live-update.astro. Pesan kunci `live_update_how_it_works_title` (Judul Pembaruan Hidup Bagaimana Cara Kerjanya).
  2. GitHub Actions builds your app
  3. __CAPGO_KEEP_0__ Aksi membangun aplikasi Anda
  4. Fastlane mengunggahnya ke saluran beta Google Play

Aplikasi Anda secara otomatis diperbarui

  • Waktu dan Biaya Pembangunan Aplikasi Anda dapat selesai dalam waktu 3-5 menit
  • Biaya untuk repositori pribadi: sekitar $0,04 per build
  • Gratis untuk proyek open-source

Panduan Pengaturan CI/CD

Alternatif Platform CI/CD

Live Updates & Deployment

Sumber Daya

Keep going from Automatic Capacitor Android build with GitHub actions

Jika Anda menggunakan Automatic Capacitor Pembangunan Android Otomatis dengan GitHub aksi untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo CI/CD untuk alur kerja produk di Capgo CI/CD, Capgo Pembangunan Natively untuk alur kerja produk di Capgo Pembangunan Natively, Capgo 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.

Live updates untuk aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi.

dukungan manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk menciptakan aplikasi mobile profesional yang sebenarnya.