CI/CD nedir?

Sürekli entegrasyon (CI) otomatik olarak tüm testlerin bir düğmeye basılması için otomatik olarak kod değişikliklerinin pratik olmasıdır.Her entegrasyon otomatik bir yapı ve test paketi tarafından doğrulanır, hataları erken yakalamak ve dağıtım kanallarını test etmek gibi CI'de yapılır.

CI/CD modern yazılım mühendisliğinin temel taşı haline geldi. Reaks Yerlisi bağlamında, uygulamalar hem iOS hem de Android'de çalıştırılmalıdır, boru hattının her adımını otomatikleştirmek manuel olarak yükleniyor ve platformlara özel olarak uygun hale geliyor.CI/CD olmadan, takımlar genellikle tek bir geliştiriciye el yapımına, işareti ve yüklemeye güveniyor - bir süreç insan hatasına ve gecikmelere eğilimlidir.

Neden CI/CD Yerlileri Için Önemlidir

Reaks Yerli, CI/CD'yi özellikle değerli kılan eşsiz zorluklar sunuyor. codebase JavaScript'de yazılır, ancak son ürün sürekli olarak iki farklı yapı sistemini yönetmek zorundasınız ( iOS için, Gradle for Android), platforma özel konfigürasyonları gerektiren yerel bağımlılıkları idare etmek ve uygulama mağaza inceleme süreçlerini yönlendirmek için gereklidir.

  • [FONT:0)Faster geri bildirim döngüleri[[[Dönetici: 1) Geliştiriciler testlerden acil sonuçlar alır, linting, ve statik analiz, genellikle zorlama kodu birkaç dakika içinde.
  • [FONT=0)Redüklenmiş entegrasyon cehennem[[DÜT:1] – Frequent, büyük, çatışma-ridden birleşmeleri önler.
  • [FONT:0]Reproducible inşalar[[Dön 1: 1] – CI ortamları, “benim makinemde işlerimizi” ortadan kaldırmak için temiz ve yapılandırılır.
  • [FONT:0]Streamlined, – Automating app store gönderimleri ( ekranshots, metadata, imza) günlerden salıverme döngüleri kesir.
  • [FONT:0) Yüksek kod kalitesi[[Dönemli: 1) Otomatik kontroller kodlama standartlarını, test kapsamı eşlerini ve performans bütçelerini uygular.

Bu yararlarına rağmen, birçok Reaks Yerli takım CI/CD olmadan başlar, çünkü onu kurmak yerli araç, hızlı, hızlı ve platforma ve platforma özel imza gerektirir. Yatırım özellikle takım büyüdükçe hızlı bir şekilde öder.

Reaks için CI/CD Borularının Temelleri

Her boru hattı aşağıdaki aşamaları içermelidir, en hızlı yavaşlığa sipariş edilmelidir. Boru hattında erken başarısızlıklar kaynakları korumak için infazı durdurmalıdır.

Version Control and Branching Strategy

Açık bir şube modeli temeldir. GitFlow (feature, geliştirme, serbest bırakma, sıcak ek şubeler) planlanan sürümlerle daha büyük takımlar için iyi çalışır. Trunk-based development (kıtlı yıllarda ev işleri sürekli dağıtım için amaçlayan takımlar)

Çoğu CI sistemleri, şube başına kuralları tanımlamanıza izin verir - örneğin, sadece özel bölümlerde ünite testleri çalıştırmanıza izin verir, ancak ana dalda tam entegrasyon testleri ve beta dağıtımları.

Otomatik Test Otomatik Test

Test CI'nin kalbidir. Reaks Yerli için, bir tabakalı yaklaşım önerilir:

  • [FONT:0]Unit testleri[[[Dönetici:0)[[Dönetici:0))[[Dönetici testleri[Dönetici:0)) – Jest (enready paketlenmiş Reaktif Yerli) kullanarak iş mantığını test etmek, azaltıcılar ve faydalı işlevleri yürütmek. Jest hızlı ve paralel olarak çalıştırılabilir.
  • [FONT:0]Integration testleri[[Dönetici: 1 ) – Kompiyonlar ve hizmetler arasındaki test etkileşimleri. Reaksiyon Yerli Test Kütüphanesi bileşenleri ve davranışları ortaya çıkarmaya yardımcı olur.
  • [FONT:0)Bit-to-end (E2E) testleri[Dönetici için) veya Maestro, simülatörler / amulatörler üzerinde gerçek kullanıcı senaryolarını simülatörüylettirmek için kullanılır. E2E test daha yavaş ama o birim testleri özlemektir.
  • [FONT=0]Snapshot testi[[Dönetici: 1 ) – depolamak için üretilen çıktıyı karşılaştırarak geleneksel olmayan UI değişiklikleri.Snapshot testi[[[Dönetici:0).

CI'nizi herhangi bir testin geçemediği gibi yeniden yapılandırın. Kaliteli kapıları uygulamak için kapsamak için kapsamak.

Build Automation

Üretim için bir Reaksiyon Yerli uygulaması imzalamayı ve platforma özel teslim etmeyi gerektirir ( iOS için IPA, Plus için Kiev/AAB for Android).[/FLT:0)fastlane), bu adımları otomatikleştirmek için de facto standarttır.

  • [0] (gösterme sporu) bir .ipa
  • [Düzenler gradle) bir .aab oluşturmak için

iOS için, sertifikaları ve profilleri yönetmelisiniz. Güvenli bir mağazaya hızlı bir şekilde ulaşmak ve takım üyeleri ve CI makinelerinde varlıkları senkronize etmek için hızlı bir şekilde kullanın.

Kod Kalite ve Linting

ESLint ve Prettier kullanarak tutarlı bir kod stiline sahip olmak. bunları CI'de mümkün olduğunca erken çalıştırın - hızlı başarısız olurlar ve birkaç kaynak tüketirler. Daha derin analiz için, SonarQube veya KodClimate'i kod kokularını takip etmek için entegre edin, duplikasyon ve güvenlik açıklarını çalıştırın.

Artifact Management ve Code Signing

Yeni özellikler için (IPAs ve parfümler) güvenli bir şekilde depolanmalıdır. Bir bulut depolama kovasını kullanın (S3, GCS) veya App Center gibi özel bir hizmet (Yeni özellikler için de ön ele alınsa da) iOS için imzalayın ve devre dışı bırakmalı profillerin teslim edilmesi gerekir.

Reaksiyon Yerlisi Için Popüler CI/CD Platformları

Çeşitli platformlar, Reaksiyon Yerlisi için ilk sınıf desteği sağlar. seçiminiz takım büyüklüğü, bütçe ve mevcut ekosisteme bağlıdır.

  • [FONT=0)GitHub Actions[[Dönetici: 1 ) – GitHub ile sıkı bir şekilde entegre edilmiştir. Free tier, yerel repositorlar için 2.000 dakika / ay içerir.Extensive market of actions for Native Reaction, fastlane, and code sign.
  • [FONT=0)GitLab CI/CD[DÜT:1) – Doğrudan GitLab'a inşa edilmiştir. Şirketler için sınırsız dakikalar ve güçlü paralelleştirmeler için iyi. Takımlar tek bir DevOps platformu tercih eder.
  • [FONT=0)CircleCI[Dönetici:0)[Dönetici:0)CircleCI[Dönetici: yüksek çözünürlük ve paralellik ile yüksek özelleştirilebilir. iOS inşaları, MacOS koşucuları (mal Docker ve MacOS desteği nedeniyle mobil takımlar arasında popüler.
  • [FONT:0)Bitrise[[Dönetici:0)[[Dönetici:0)Bitrise[[Dönetici: Mobile CI/CD için tasarlanmıştır. Reak Yerli, hızlı, ve uygulama mağazası dağıtım için önceden yapılandırılmış adımlar sağlar.
  • [FONT=0]Koşruma[Dönetici)[[Dönetici:0)Kork ve Reaksiyon Yerlisi üzerinde yoğunlaştı.FortOS makineleri ve Kodsihiri'nin kendi imza yönetimi ile bütünleştiriliyor.

App Center (Microsoft) bir zamanlar popüler bir seçimdi, ancak bakım modunda; alternatif platformlara migrating düşünün.

Adım-Adım: GitHub Actions ile CI/CD kurmak

GitHub'da depolanan standart bir Reaks Yerli projesi (theted with a standard Reaction Native project (created with a) olarak adlandırılır. Aşağıdaki örnek test, bina için bir boru hattı oluşturur ve TestFlight ve Google Play'e dağıtılır.

İş Akışı File

CreateENGT:4) Define tetikleyicileri: ana veya serbest dolaşım dallarına itin ve talepler çekme.

name: CI/CD Pipeline
on:
 push:
 branches: [main, release/*]
 pull_request:
 branches: [main]

Koşu Testleri

Bir Node.js ortamı kullanın. Cache sonraki adımları hızlandırmaya bağlı.

jobs:
 test:
 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 test -- --coverage
 - run: npx eslint .
 - run: npx tsc --noEmit

Herhangi bir adım başarısız olursa, iş durur ve boru hattı geliştiriciyi uyarır.

iOS ve Android için bina

iOS inşaları, Macd koşucuları (GitHub, BEFFT:7) veya ESFLT:8) gerektirir. Android inşaları Ubuntu'da çalıştırılabilir ancak Android SDK'yı gerektirir. Her platform için ayrı işler kullanın.

[FONT:0) Android İşi İnşa Ediyor).

 build-android:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v4
 - uses: actions/setup-node@v4
 with: { node-version: '20' }
 - run: npm ci
 - run: |
 cd android && ./gradlew assembleRelease
 env:
 SIGNING_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE }}
 SIGNING_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
 SIGNING_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
 SIGNING_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
 - uses: actions/upload-artifact@v4
 with:
 name: app-release.aab
 path: android/app/build/outputs/bundle/release/app-release.aab

[FONT:0]iOS İşi İnşa Ediyor[Dönetici: 1 )

 build-ios:
 runs-on: macos-13
 steps:
 - uses: actions/checkout@v4
 - uses: actions/setup-node@v4
 with: { node-version: '20' }
 - run: npm ci
 - run: bundle install
 - run: bundle exec fastlane ios build
 env:
 MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.APP_SPECIFIC_PASSWORD }}
 - uses: actions/upload-artifact@v4
 with:
 name: app.ipa
 path: build/ios/App.ipa

Not: iOS, GoHub Mac koşucuları üzerinde önceden yüklenen Xcode Komutanlığı Line Tools'u gerektirir. hızlılane, maç ve spor salonu ile imzalayan ve inşa eden bir şekilde yapılandırılmalıdır.

App Stores'lara iş yapmak

Binadan sonra, inşa işlerine bağlı olan dağıtım işlerini çalıştırın.UseETHFLT:0)fastlane pilotu TestFlight ve )fastlane tedarik[DDDD 3) Google Play için.

 deploy-testflight:
 needs: [build-ios, test]
 runs-on: macos-13
 steps:
 - uses: actions/checkout@v4
 - run: bundle install
 - run: bundle exec fastlane ios upload_to_testflight
 env:
 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.APP_SPECIFIC }}

 deploy-playstore:
 needs: [build-android, test]
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v4
 - run: bundle install
 - run: bundle exec fastlane android deploy_to_playstore
 env:
 PLAY_STORE_JSON_KEY: ${{ secrets.PLAY_STORE_JSON_KEY }}

Üretim için, manuel bir onay adımı ekleyin veya sadece etiketlere tetikleyin.

Reaksiyon Yerli CI /CD için en iyi uygulamalar

  • [FONT=0]Cache agresif bir şekilde[Dönetici: 1 ) – Önbellek Node modules, CocoaPods, Gradle önbellek ve Homebrew paketleri. onları bir kilitbellilere dayanarak durdurabilirsiniz.
  • [FONT=0] Çevre değişkenleri ve sırları [Dönetici: 1 ) – Hiçbir zaman zor kod anahtarları, CI platform sırlarında veya Jetonlar imzalamak.
  • [FONT=0) Parametreize yapılar[[[Dönetici: 1 ) - Egzersiz ve üretim yapıları arasında ayrım yapmak için çevresel değişkenleri kullanın (örneğin, API uç noktaları, paket kimlikleri).
  • [FONT:0]Run testleri paralel olarak[[Dönetici: 1 ) - Birden fazla iş arasında Split test süitleri veya test cihazı (Seks ile En İyi 9) ve [[DÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
  • [FONT=0)Handle yerli bağımlılıklar dikkatle - Eğer yerel kodla kütüphaneleri kullanıyorsanız (örneğin, tepki-çap makinesi), CI'nin gerekli sistem bağımlısı olmasını sağlar (örneğin, OpenCV) önceden yükleme.
  • [FONT=0)Monorepo'nun düşünceleri[[[Dönem: 1) – Bir monorepo kullanıyorsanız (Nx, Turborepo), CI'yi değiştirmiş paketleri tespit etmek ve sadece etkilenenleri oluşturmak için yapılandırın.
  • [FONT:0]Record ve uyarı[[Dönetici: 1 ) – İzleme süresi, başarısızlık oranları ve test kapsamı trendleri. Başarısız boru hatları için bildirimleri (Slack, e-posta) ayarlayın.

Ortak Pitfalls ve Them'dan Nasıl Kaçırmak

  • [FONT:0]Uzun zaman [[Dönetici:0)[Döneticileri kullanarak optimize edin ve paralelleştirme işleri için Linux koşucuları kullanın; Android ve test için Linux'tan yararlanın.
  • [FONT:0]Flaky testleri [[DÜT:1] - özellikle CI'de E2E testleri kullanın veya onları bloklama olarak işaretlemeyin.Detox'un yerleşik yeniden denemesini tercih edin.Hazırıcılar /emulatörler temizlenir.
  • [FONT=0)Certificate and provisioning profile expiry[Dönetici:0))[değiştir | kaynağı değiştir] Bir Git repo veya bulut depolama ile hızlı bir eşleşme kullanın. Takvim hatırlatmalar, maç sonrası sertifikaları döndürür. Automate yenilemek için, maçın 03.Cooking the match'sur.
  • [FONT:0] CI'de imza sorunları imzalayın[Dönder: Ortak tuzaklar: yanlış düzenleme profili, paket tanımlayıcı ve profil arasındaki yanlış eşleştirme, ayrı anahtar. Çift kontrol maç yapılandırması ve tüm sırların doğru olmasını sağlar.
  • [FONT:0) Android anahtar katlı kaybı[[Dönetici:0] - Serbest bırakılan anahtar mağazanızın yedeklerini tut.Eğer kaybettiyse, uygulamayı güncelleyemez. CI sırları kullanabilirsiniz, ancak aynı zamanda güvenli bir yerde yerel bir yedekleme tutabilirsiniz.
  • [FONT:0)Dependency version yanlış eşleştirmeler[DÜT:1) - Pin versiyonları inurFLT:16) ve [[FONT: 5 ).Use lockfiles and commit them. CI should always install from lockfiles () yerine, ([FLT: 9)

Başarıyı Ölçme Başarısını Ölçmek

Boru hattınızı değerlendirmek için aşağıdaki ölçümleri izleyin:

  • [FONT:0)Zaman[Dönem: 1) Tamamen sanata yapılan işlerden elde edilen zaman. Tam bir boru hattı için 30 dakika boyunca.
  • [FONT=0)İşçi frekansı[[[Dönetici: 1))[Dönetici: İyi bir CI/CD boru hattı mobil uygulamalar için en az haftalık sürümler etkinleştirmelidir.
  • [FONT:0)Failure oranı[[Dönetici: 1))[Dönetici: 2))) - Sürekli olarak başarısız olan inşaatların Yüzdesi.
  • [FONT:0) Geri bildirim için zaman[[Dönetici:0) - CI sonuçlarını görmek için bir geliştiriciye ne kadar sürer? 10 dakika içinde birim testleri mükemmel.
  • [FONT:0)Test kapsama[[Dön 1: 1] – İzleme eğilimleri, mutlak sayılar değil. Ani drop yeni test edilmemiş kodu gösterir.

Bu metrikleri şişen tespit etmek ve boru hattınızda iterate. Örneğin, iOS 45 dakika sürerse, CocoaPods'ı düşünün ve Mac M1 koşucularını daha hızlı derlemek için kullanın.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Reaksiyon Yerli uygulamaları için CI/CD sadece otomasyonla ilgili değildir - önce güvenilir, yenidenroducible teslimat süreci oluşturmak ve nihayet otomatik dağıtım işlemlerinizi ekleyin. Boru hattınızı entegre etmek, E2E testlerinizi, kod kaliteli kapıları ve izlemeleri.

Burada açıklanan araçlar ve desenler - GitHub Actions, fastlane, Detox ve uygun caching - takımların milyonlarca indirmeyi işleten savaş tarafından test edilir.Onları benimsemek, geliştirme iş akışlarınızı manuel, hata-prone serbest bırakma, yüksek kaliteli güncellemelerin sürekli akışına dönüştürecektir.

Daha fazla okuma için, danışma:0) Yerlinin resmi CI/CD belgeleri) ve [[Dönetici:2)CircleCI (Expation Native) için kılavuzluk sağlar.