Lebih lanjut ke konten utama
CI/CD

Automatic Capacitor Android build with GitHub actions

How to set up a CI/CD pipeline for your Android Capacitor app using fastlane and GitHub Actions in 5 minutes

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Editor

Automatic Capacitor Android build with GitHub actions

Mengatur CI/CD untuk aplikasi Capacitor dapat kompleks dan memakan waktu. Berikut adalah hal-hal yang perlu Anda ketahui:

Sekarang kami merekomendasikan menggunakan Pembangunan Capgo 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, runner Gradle, keystore, dan skrip unggah sendiri.

Prasyarat

Sebelum memulai, Anda perlu mengatur:

  • Salah satu GitHub dengan akses admin
  • Aplikasi Anda sudah dipublikasikan di Google Play Store dengan tanda tangan yang tepat
  • Kunci dan file keystore Android
  • Projek Google Cloud Console dengan toko Play API diaktifkan
  • Akun layanan dengan izin yang tepat
  • Pengertian GitHub Actions workflows
  • Pengenalan konfigurasi Fastlane
  • Waktu untuk menjaga dan memperbaiki pipeline

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

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

Harga

  • Capgo plans start at $12/month
  • Rencana __CAPGO_KEEP_0__ mulai dari $12/bulan
  • Termasuk pembaruan OTA dan sekitar 15 pembangunan native per bulan

Set up Capgo Build in CI/CD

context: Halaman/area: Capgo Builder / produk pembangunan native cloud. Peran: Kalimat copy situs web. Dilihat di: halaman native-build.astro. Pesan kunci `native_build_builder_build_minutes` (Native Build Builder Build Minutes).

Berikut apa yang perlu Anda lakukan:

GitHub Aksi Biaya

Harga GitHub Aksi

GitHub Aksi 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 Pengaturan Tangan

  1. Buat Keystore Android
  2. Atur Akun Layanan Google Play
  3. Atur Fastlane
  4. Konfigurasi rahasia GitHub
  5. Buat GitHub Actions workflow

1. Buat Android Keystore

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

Menghasilkan 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

Apa yang akan Anda lakukan selanjutnya?

  • Kata sandi keystorePilih kata sandi yang kuat (Anda akan membutuhkannya sebagai) KEYSTORE_STORE_PASSWORD)
  • Kata sandi kunciPilih kata sandi yang kuat (Anda akan membutuhkannya sebagai) KEYSTORE_KEY_PASSWORD)
  • Nama, 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
    • Sandi keystore - Anda memerlukan ini sebagai KEYSTORE_STORE_PASSWORD
    • Sandi kunci - Anda memerlukan ini sebagai KEYSTORE_KEY_PASSWORD
  • Salin file keystore: Jika Anda kehilangkannya, Anda tidak dapat memperbarui aplikasi yang telah dipublikasikan

  • Jagalah rahasia: Tidak pernah komit file keystore ke git

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

Alternatif: Gunakan Keystore yang Ada

Jika Anda sudah menerbitkan aplikasi, Anda harus menggunakan keystore yang sama yang digunakan awalnya. Anda dapat menemukannya:

  • Pada mesin lokal Anda di mana Anda pertama kali membangun aplikasi
  • Pada Console Play → 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. Pergi ke Console Cloud Google
  2. Buat proyek baru atau pilih proyek yang ada
  3. Perhatikan ID proyek

Langkah 2.2: Aktifkan Pengembang Google Play API

  1. Di Konsole Cloud Google, pergi ke APIs & Services → Library
  2. Cari “Pengembang Android Google Play API”
  3. Klik Enable

Langkah 2.3: Buat Akun Layanan

  1. Pergi ke IAM & Admin → Akun Layanan
  2. Klik Membuat Akun Layanan
  3. Masukkan detail:
    • Nama: github-actions-uploader
    • Deskripsi: “Akun layanan untuk GitHub Aksi untuk mengunggah build”
  4. Klik Buat dan Lanjutkan
  5. Lebih lanjut untuk sementara (klik Lanjutkan, kemudian Done)

Langkah 2.4: Membuat Kunci Akun Layanan

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

Langkah 2.5: Berikan Akses di Play Console

  1. Pergi ke Google Play Console
  2. Pergi ke Pengaturan → API access
  3. Akses __CAPGO_KEEP_0__ Di bawahAkun layanan , klik untuk akun layanan Anda
  4. Di halaman Izin aplikasi tab, tambahkan aplikasi Anda
  5. Di halaman Izin akun tab, berikan izin ini:
    • Lihat informasi aplikasi dan download laporan bulk (hanya baca)
    • Buat, edit, dan hapus aplikasi draft
    • Rilis aplikasi ke jalur uji coba
    • 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 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 sebuah fastlane folder di root proyek Anda dan tambahkan sebuah Fastfile dengan konten 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 akun layanan JSON, Anda perlu menyimpannya secara aman di GitHub.

Langkah 4.1: Akses GitHub Rahasia

  1. Pergi ke repositori Anda di GitHub
  2. Klik Pengaturan → Rahasia dan variabel → Aksi
  3. Klik Buat rahasia repositori baru

Langkah 4.2: Tambahkan Rahasia yang Diperlukan

Tambahkan setiap rahasia satu per satu:

PLAY_CONFIG_JSON

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

Pada macOS/Linux:

base64 service_account_key.json | pbcopy

Pada Windows (PowerShell):

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

ANDROID_KEYSTORE_FILE

  1. Konversikan keystore Anda ke base64:

Pada macOS/Linux:

base64 my-release-key.keystore | pbcopy

Pada Windows (PowerShell):

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

KEYSTORE_KEY_ALIAS

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

KUNCI SANDI KEYSORE

Membuat rahasia baru dengan kunci sandi yang Anda tetapkan ketika menghasilkan keystore

KUNCI SANDI KEYSORE

Membuat rahasia baru dengan sandi keystore yang Anda tetapkan ketika menghasilkan keystore

NAMA PACKAGES PEMBUAT

Membuat 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: Verifikasi Semua Rahasia

Pastikan Anda telah mengonfigurasi 6 rahasia ini:

  • ✅ KONFIGURASI MAIN PLAY
  • ✅ FILE KEYS STORE ANDROID
  • ✅ ALIAS Kunci KEYS STORE
  • ✅ KATA SANDI KEYS STORE
  • ✅ KATA SANDI TOKO KEYS STORE
  • ✅ NAMA PACKAGES PEMBUAT

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. Buatlah Tag Git untuk mengaktifkan alur kerja
  2. GitHub Aksi membangun aplikasi Anda
  3. Fastlane mengunggahnya ke saluran beta Google Play
  4. Aplikasi Anda secara otomatis diperbarui

Waktu dan Biaya Pembangunan

  • Waktu pembangunan: 3-5 menit
  • Biaya untuk repositori pribadi: sekitar $0,04 per pembangunan
  • Gratis untuk proyek sumber terbuka

Panduan Pengaturan CI/CD

Platform CI/CD Alternatif

Pembaruan Hidup & Pengembangan

Sumber Daya

Teruskan dari Pembangunan Android Otomatis Capacitor dengan Aksi-aksi GitHub

Jika Anda menggunakan Pembangunan Android Otomatis Capacitor dengan Aksi-aksi GitHub Untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo Otomatisasi CI/CD untuk alur kerja produk di Capgo Otomatisasi CI/CD, Capgo Pembangunan Asli untuk alur kerja produk di Capgo Pembangunan Asli, Capgo Integrasi for the product workflow in Capgo Integrations, untuk alur kerja produk di __CAPGO_KEEP_0__ Integrasi, untuk detail implementasi di Integrasi CI/CD, dan GitHub Integrasi Aksi untuk detail implementasi di GitHub Integrasi Aksi

Update Langsung untuk Aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

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.