Membangun CI/CD pipeline dengan GitHub Actions untuk build signed IPA/APK, Fastlane untuk signing & build automation, Ionic Appflow sebagai managed option, keamanan certificates & keystores di CI, serta praktik push tag → artifact siap distribusi.

Setelah di episode 18 kita menguasai testing dan debugging, pada episode ini kita membangun CI/CD pipeline — otomasi build, test, dan distribusi aplikasi. Di dunia production, manual build tidak scalable. Satu pipeline yang handal menghemat jam kerja dan mengurangi human error.
Mengapa CI/CD penting? Karena mobile app memiliki build yang kompleks: web build → Capacitor sync → native build → signing → artifact. Setiap langkah bisa gagal. CI/CD memastikan setiap build terstandardisasi dan reproducible.
name: Build & Release
on:
push:
tags:
- 'v*'
jobs:
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci
- run: npm run build
- run: npx cap sync android
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Build APK
working-directory: android
run: ./gradlew assembleRelease
- name: Sign APK
uses: r0adkll/sign-android-release@v1
with:
releaseDirectory: android/app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.ANDROID_SIGNING_KEY }}
alias: ${{ secrets.ANDROID_ALIAS }}
keyStorePassword: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }}
- uses: actions/upload-artifact@v4
with:
name: app-release.apk
path: android/app/build/outputs/apk/release/*.apk
build-ios:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci
- run: npm run build
- run: npx cap sync ios
- name: Build IPA
uses: yukiarrr/ios-build-action@v1.12.0
with:
project-path: ios/App/App.xcodeproj
workspace-path: ios/App/App.xcworkspace
scheme: App
p12-base64: ${{ secrets.IOS_P12_BASE64 }}
mobileprovision-base64: ${{ secrets.IOS_PROVISION_BASE64 }}
code-signing-identity: 'iPhone Distribution'
team-id: ${{ secrets.IOS_TEAM_ID }}
- uses: actions/upload-artifact@v4
with:
name: app-release.ipa
path: ios/App.ipaFastlane mengautomasi build, signing, dan upload ke store:
npm install -D fastlane
cd ios && fastlane initdefault_platform(:ios)
platform :ios do
desc "Build and upload to TestFlight"
lane :beta do
build_app(
workspace: "App.xcworkspace",
scheme: "App",
export_method: "app-store",
)
upload_to_testflight
end
desc "Build and upload to App Store"
lane :release do
build_app(
workspace: "App.xcworkspace",
scheme: "App",
export_method: "app-store",
)
upload_to_app_store(skip_metadata: true, skip_screenshots: true)
end
enddefault_platform(:android)
platform :android do
desc "Build and upload to Play Console internal testing"
lane :beta do
gradle(
task: "assemble",
build_type: "Release",
project_dir: "./"
)
upload_to_play_store(track: 'internal')
end
endIonic Appflow adalah platform managed CI/CD dari Ionic:
Cocok untuk team yang tidak ingin mengelola CI/CD sendiri. Harga mulai dari free tier untuk project kecil.
Warning
Jangan pernah commit certificates, keystores, atau provisioning profiles ke git. Gunakan GitHub Secrets atau environment variables di CI.
| Secret | Platform | Keterangan |
|---|---|---|
ANDROID_SIGNING_KEY | Android | Base64 encoded keystore |
ANDROID_ALIAS | Android | Key alias |
ANDROID_KEY_STORE_PASSWORD | Android | Password keystore |
IOS_P12_BASE64 | iOS | Base64 encoded p12 |
IOS_PROVISION_BASE64 | iOS | Base64 encoded provisioning profile |
IOS_TEAM_ID | iOS | Apple Team ID |
base64 -i certificate.p12 -o certificate_base64.txtSetelah pipeline dikonfigurasi:
git tag v1.0.0
git push origin v1.0.0Pipeline akan otomatis:
npm run build).npx cap sync).Tip
Mulai dari internal testing track (Play Console) atau TestFlight (iOS). Jangan langsung publish ke production. Uji di minimal 3-5 perangkat sebelum release public.
Pada episode 19 ini, kalian telah memahami:
Di episode 20 selanjutnya, kita akan membahas publikasi ke App Store dan Play Store — provisioning profiles, App Store Connect, keystore signing, Play Console release tracks, target API level requirements, dan checklist rilis pertama. Sampai jumpa!