CI/CD Pipeline
Pipeline Stages
Per Platform
| Platform | CI Tool | Build Tool | Distribution |
|---|---|---|---|
| Android | GitLab CI / GitHub Actions | Gradle | Firebase App Distribution / Play Console |
| iOS | GitLab CI / GitHub Actions | Xcode + xcodebuild | TestFlight / App Store Connect |
| Flutter | GitLab CI / GitHub Actions | Flutter CLI | Firebase App Distribution / Stores |
| RN CLI | GitLab CI / GitHub Actions | Gradle + xcodebuild | Firebase App Distribution / Stores |
| RN Expo | EAS Build (cloud) | Expo CLI | EAS Submit / Stores |
GitLab CI Example (Flutter)
stages:
- analyze
- test
- build
- deploy
analyze:
stage: analyze
script:
- flutter analyze
- dart format --set-exit-if-changed .
test:
stage: test
script:
- flutter test --coverage
coverage: '/lines\.*:\s*(\d+\.\d+)%/'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura.xml
build:android:
stage: build
script:
- flutter build apk --release --obfuscate --split-debug-info=build/debug-info
artifacts:
paths:
- build/app/outputs/flutter-apk/app-release.apk
only:
- develop
- /^release\/.*$/
- main
deploy:staging:
stage: deploy
script:
- firebase appdistribution:distribute build/app/outputs/flutter-apk/app-release.apk
--app $FIREBASE_APP_ID
--groups "qa-testers"
only:
- develop
Secrets Management
Signing keys, API keys, dan service account credentials harus disimpan di CI/CD Variables (masked & protected), bukan di repository.