CI/CD

React Native CI/CD Pipeline

CI/CDFastlaneEAS

EAS ve Fastlane ile imzalama, artifact bütünlüğü, store upload, OTA ayrımı ve New Architecture’a dayanıklı mobil pipeline. Rollback runbook dahil.

EG

Emre Gürbüz

2 Ağustos 2026 · 4 dk okuma

Mobil CI/CD, web’deki “build & deploy”dan fazlasıdır: code signing, provisioning, store metadata, cihaz matrisi, OTA ve rollback. React Native’de bir de iki native toolchain (Gradle + Xcode) + JS bundle eklenir.

Pipeline kalitesi YAML uzunluğu değil; artifact bütünlüğü ve karar kapılarıdır. İmza, source map, native/OTA ayrımı oturmadan “günde üç store submit” yalnızca daha hızlı kırılmaktır.

Minimal sağlıklı pipeline

  1. Quality gate: lint, typecheck, unit test — PR merge blocker
  2. JS bundle sanity: Metro release + Hermes bytecode doğrulama
  3. Android release: AAB + mapping.txt arşivi
  4. iOS release: archive + export + dSYM arşivi
  5. Distribute: internal (Firebase / TestFlight) otomatik
  6. Store upload: production için manuel approval
  7. Opsiyonel OTA: native değişmemişse JS-only publish
  8. Observability: Sentry/Crashlytics + source map upload

Kavramsal GitHub Actions iskeleti:

jobs:
  quality:
    steps:
      - run: yarn lint && yarn tsc --noEmit && yarn test
  android-release:
    needs: quality
    steps:
      - run: ./gradlew :app:bundleRelease
      - uses: actions/upload-artifact@v4
        with:
          name: mapping
          path: android/app/build/outputs/mapping/release/mapping.txt
  ios-release:
    needs: quality
    steps:
      - run: bundle exec fastlane ios beta

Quality gate’i atlayan “hotfix pipeline” borç biriktirir — acil durumda bile minimal test koşulsun.

PR vs release pipeline

Her PR’da tam native release pahalıdır; çoğu ekip PR’da quality + (opsiyonel) JS bundle çalıştırır. Native release main merge veya tag’de tetiklenir. Native kod değiştiren PR’larda en az bir platformda smoke release düşünün.

EAS vs Fastlane vs hybrid

YaklaşımArtıEksiKim için
EAS BuildDüşük bakım, cloud macOSVendor lock-inKüçük-orta ekip
Fastlane + self-hostTam kontrolMac runner maliyetiRegüle ortam, büyük ekip
HybridEAS native + kendi OTAİki sistem bilmekExpo + custom native

Karar: ekip boyutu, compliance, macOS runner erişimi.

İmzalama ve secret’lar

  • Android: keystore + Play App Signing
  • iOS: distribution certificate + provisioning (match veya ASC API key)
  • CI secret’ları: rotate edilebilir, audit log’lu
  • Anti-pattern: laptop’tan manuel store upload

Sertifika süresi dolmadan 30 gün önce alert. Staging ve production credential’ları ayrı tutun. Repo’da yalnızca .env.example kalsın.

OTA’nın pipeline’daki yeri

OTA (Over-The-Air) yalnızca JS bundle değişikliğinde çalışır. Native kod, Gradle/Pod, native config değiştiyse store pipeline zorunlu.

Path filter örneği:

git diff --name-only origin/main...HEAD | grep -E '^(android|ios|package.json|yarn.lock|app\.json)' \
  && echo "BLOCK OTA — native-capable change" || echo "JS-only OTA candidate"

package.json native modül bump içerebilir; otomatik OTA tehlikelidir. OTA bundle belirli native binary versiyonuna hedeflenmeli (targetBinaryVersion).

New Architecture ve CI matrix

Geçişte newArchEnabled=true/false matrix faydalıdır — her iki modda yeşil olmadan default değiştirmeyin.

  • Pod cache key: RN sürümü + Podfile.lock + new arch flag
  • Codegen’i commitlemeyin; build’de üretin
  • Android R8 + New Arch’ı release job’da mutlaka çalıştırın

Cache: hız vs doğruluk

  • node_modules / yarn cache
  • Gradle dependency cache
  • CocoaPods cache
  • Metro transform cache (metro + babel hash)

Haftalık clean builder job — cache’siz tam pipeline — regresyonu erken yakalar.

Artifact bütünlüğü

ArtifactAmaçPlatform
JS source mapHermes stackHer iki
mapping.txtR8 reverseAndroid
dSYMCrash symbolicationiOS
AAB / IPAStore + referansHer iki
OTA metadataRollback + auditJS-only

Release name, build number ve git SHA her artifact’ta tutarlı olmalı.

Rollback runbook

Store: Yeni versiyon submit (downgrade yok). Kritik bug’da hızlı hotfix binary — OTA yetmez.

OTA: Önceki bundle’a promote, 30 dk monitoring. Threshold aşılırsa store hotfix.

Pipeline: Bozuk CI config’i geri al; artifact’lar immutable.

Production checklist

  • PR’da quality gate zorunlu
  • mapping.txt + dSYM + source map otomatik upload
  • Internal dağıtım otomatik
  • Store production upload manuel approval
  • OTA path filter aktif
  • Rollback runbook yazılı (store + OTA ayrı)
  • Haftalık clean build job
  • New Arch matrix (geçiş döneminde)
  • Sertifika expiry alert 30 gün önce

Özet

RN CI/CD kalitesi artifact bütünlüğü ve karar kapılarında ölçülür. İmza güvenliği, symbol upload, native/OTA ayrımı ve cache hijyeni oturduğunda hotfix süresi düşer. Pipeline’ı “build geçti” değil “doğru artifact doğru yere gitti” olarak tanımlayın.


Diğer yazılar