GitHub Actions, GitHub'a entegre edilmiş bir CI/CD ve otomasyon platformudur ve mobil uygulamaların derleme, test ve dağıtımını doğrudan depo üzerinden çalıştırmanıza olanak tanır. GitHub, 2024'e göre platform, pazaryerinde 15.000'den fazla hazır action içerir ve linting'den uygulama mağazalarında yayınlamaya kadar geliştirmenin tüm aşamalarını kapsar.
Anahtar Noktalar
GitHub Actions, GitHub'a entegre edilmiş ve 2019'da başlatılan bir iş akışı otomasyon platformudur. Doğrudan depoda saklanan YAML dosyalarında CI/CD boru hatları tanımlamanıza olanak tanır. Her iş akışı bir tetikleyiciyle başlatılır: push, pull request, etiket oluşturma veya zamanlamaya göre. Jenkins veya TeamCity'nin aksine, bir CI sunucusu barındırmak için ayrı bir altyapı gerekmez.
Mobil geliştirme bağlamında GitHub Actions, APK ve IPA derlemesini, emülatörlerde birim testleri ve UI testlerini çalıştırmayı, lint'lerle kod denetimini, imzalamayı ve Google Play ile App Store'da yayınlamayı otomatikleştirir. Platform, ücretsiz dakikalar sağlar herkese açık depolar için ve özel depolar için fiyatlandırma planına göre. Açık kaynak mobil projeler için bu, ücretsiz tam teşekküllü bir CI/CD çözümüdür.
GitHub Actions mimarisi dört seviyeden oluşur. Workflow, otomasyonu tanımlayan kök YAML dosyasıdır. Workflow, Görevlerden (Jobs) oluşur, her Görev ayrı bir Runner'da çalışır. Bir Görev içinde Adımlar (Steps) yürütülür — sıralı komutlar veya harici action'lar. Olaylar (Events) tetikleyicileri tanımlar: push, pull_request, schedule, workflow_dispatch. Bir iş akışı, GitHub arayüzündeki Actions sekmesi aracılığıyla manuel olarak da tetiklenebilir.
GitHub, önceden yüklenmiş işletim sistemlerine sahip barındırılan runner'lar sağlar: Ubuntu, macOS ve Windows. iOS derlemeleri için macOS runner zorunludur, Android için — Linux veya macOS. Kendi barındırılan runner'lar, özel donanım gereksinimleri olan büyük projeler için yararlı olan, özel bir ortamla kendi sunucularınızda görevleri çalıştırmanıza olanak tanır. GitHub ayrıca görev yürütme kuyruklarını düzenlemek için kendi barındırılan runner gruplarını da destekler.
Temel bir iş akışı dosyası bölümler içerir: name, on (tetikleyiciler), jobs. Her görev runs-on (runner türü), strategy (matris), steps (eylem listesi) belirtir. Adımlar, shell komutları veya pazaryerinden hazır action'lar olabilir ve owner/repo@version sözdizimiyle bağlanır.
Android derlemeleri için bir iş akışı genellikle şu adımları içerir: depoyu checkout etme, JDK kurulumu, Gradle önbelleğini yapılandırma, assembleRelease çalıştırma. iOS için macOS runner gerekir, xcode-select aracılığıyla Xcode kurulumu, provisioning profile çözümlemesi ve xcodebuild çalıştırma. iOS derlemelerinin karmaşıklığı, kod imzalama ve sertifika yönetiminde yatar. Apple'a özgü ayarlar, apple-actions/import-codesign-certs aracılığıyla provisioning profile yönetimini içerir.
Matrix stratejisi, derlemeleri aynı anda birden çok sürümde çalıştırmanıza olanak tanır. Örneğin: iOS sürümleri (15.0, 16.0, 17.0) ve Xcode (14, 15) ile matris. Bu, doğrulamayı hızlandırır uygulamanın farklı işletim sistemi sürümleriyle uyumluluğunu, ancak runner dakika tüketimini artırır. Sınırlı CI bütçesine sahip projeler için matris yalnızca ana yapılandırmalarla sınırlandırılabilir.
GitHub Actions, JDK kurulumu için setup-java action'ı ve Gradle önbelleğe alma için caching sağlar. Android SDK, Ubuntu runner'larında önceden yüklüdür. Özel API seviyeleri için ayrı bir adımda sdkmanager kullanılır. Android ve iOS derlemeleri için ayrı iş akışları oluşturulması önerilir, çünkü farklı runner'lar ve derleme araçları kullanırlar.
GitHub Marketplace, topluluk ve resmi geliştiriciler tarafından oluşturulan 15.000'den fazla action içerir. Mobil geliştirme için temel kategoriler şunları içerir: Kod imzalama (apple-actions/import-codesign-certs), test (react-native-community/action), dağıtım (google-github-actions/release-google-play), bildirimler (slackapi/slack-github-action). Firebase App Distribution, TestFlight yükleme ve Fastlane için action'lar da mevcuttur. Her action, belirli bir runner işletim sistemiyle uyumluluk etiketine sahiptir.
Her action'ın bir sürümü, açıklaması, README'si ve lisansı vardır. Bir action seçerken, satıcılardan (Google, Apple, Microsoft) resmi olanlar ve Verified Badge ile doğrulanmış olanlar tercih edilmelidir. Sabit bir ana sürüm belirtmek önemlidir (actions/checkout@v4), @main değil, beklenmeyen değişikliklerden kaçınmak için. Gerekli action pazaryerinde yoksa, özel bir action oluşturabilirsiniz — depoda yerel olarak (Docker action veya JavaScript action) veya pazaryerinde yayınlayabilirsiniz.
iOS uygulamaları geliştirirken, simülatörler ve cihazlarla doğru çalışmayı ayarlamak önemlidir. macOS-14 runner'ı, ARM mimarisinde Intel derlemelerini çalıştırmak için Rosetta 2 ile bir ortam sağlar. Bir iş akışı birden çok derleme şablonu içerebilir — pull request'ler için Debug ve etiketler için Release. GitHub Actions, test sonuçlarını görüntülemek için xcparse/sonarqube action'ı aracılığıyla xcresult ayrıştırmasını destekler. Derleme durumu bildirimleri göndermek için bir Slack veya Telegram action'ı eklenebilir.
iOS için kod imzalama, sertifikaların ve provisioning profile'ların içe aktarılmasını gerektirir. Apple-actions sağlar bir P12 sertifikasını içe aktarmak ve bir provisioning profile yüklemek için bir adım. Sertifikalar GitHub Actions secret'ları olarak saklanır ve yalnızca derleme aşamasında şifresi çözülür. İmzalama otomasyonu için, iş akışında ayrı bir adım olarak çağrılabilen Fastlane match kullanılır.
Swift'te bir iOS uygulaması için projeyi derleyen, testleri çalıştıran ve arşivlenmiş bir derleme oluşturan bir iş akışını ele alalım. İş akışı kullanır macOS-14 runner, Xcode 15.4 ve sertifika yönetimi için action'lar.
name: iOS CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_15_4.app
- name: Install CocoaPods
run: pod install
- name: Build and test
run: xcodebuild clean test -workspace App.xcworkspace
-scheme App -sdk iphonesimulator
- name: Archive
run: xcodebuild archive -workspace App.xcworkspace
-scheme App -archivePath App.xcarchive
Önbelleğe alma, iş akışı çalıştırmaları arasında bağımlılıkları koruyarak derleme süresini azaltır. GitHub sağlar actions/cache aracılığıyla yerleşik önbelleğe alma. Gradle için ~/.gradle, CocoaPods için — Pods/, SPM için — .build/ önbelleğe alınır. Önbellek anahtarı, bağımlılık listesi dosyasının karmasını içerir — bağımlılıklar değiştiğinde önbellek otomatik olarak geçersiz kılınır.
Önbellek geri yükleme stratejisine (restore-keys) özel dikkat gösterilmelidir. Tam anahtar bulunamazsa, GitHub Actions restore-keys aracılığıyla kısmi eşleşme dener. Bu yararlıdır yalnızca bir bağımlılık değiştiğinde — önbellek kısmen kullanılabilir durumda kalır. Gradle için, projenin farklı modülleri arasında derleme sonuçlarını önbelleğe alan Gradle Build Cache'in etkinleştirilmesi de önerilir.
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle*') }}
Önbellek verimliliği Android projeleri için: önbelleksiz ilk derleme — 8–12 dakika, önbellekli sonraki derleme — 2–4 dakika. CocoaPods ile iOS için tasarruf benzerdir. En uygun önbellek yönetimi için actions/cache'in Gradle'ın setup-gradle action'ıyla birleştirilmesi önerilir. React Native'de npm bağımlılıkları için, package-lock.json karmasıyla actions/cache kullanılır. Doğru önbellek yapılandırmasıyla derleme süresi %70'e kadar azaltılabilir.
GitHub Actions, iş akışı, görev ve adım düzeyinde ortam değişkenlerini destekler. Ortam değişkenleri geçersiz kılınabilir: adım düzeyi en yüksek önceliğe sahiptir. Gizli veriler için her zaman secret kullanın — AES-256 ile şifrelenirler ve günlüklerde görüntülenmezler. Ortam koruma kuralları da mevcuttur — dağıtımdan önce zorunlu manuel onay. Ek güvenlik için belirli kullanıcılardan veya ekiplerden zorunlu onay yapılandırılabilir.
GitHub Actions ayrıca Yeniden Kullanılabilir İş Akışlarını (Reusable Workflows) destekler — diğer iş akışlarından çağrılabilen yeniden kullanılabilir boru hatları. Bu, şunu sağlar: merkezi bir derleme iş akışı oluşturma ve bunu kuruluşun tüm depolarında yeniden kullanma. Yeniden kullanılabilir iş akışı tek bir satırla çağrılır ve giriş parametrelerini ve secret'ları kabul edebilir. Bu, özellikle büyük ekiplerde CI/CD uygulamalarını standartlaştırmak için yararlıdır.
Mobil projeler için GitHub Actions yapılandırırken güvenlik ilkelerine uymak önemlidir. OIDC (OpenID Connect), uzun ömürlü kimlik bilgilerini ortadan kaldırmanıza ve bulut sağlayıcıları için geçici belirteçler almanıza olanak tanır. Betiklerde asla düz metin secret kullanmayın — GitHub Actions, günlüklerde secret'ları otomatik olarak maskelemektedir.
Mobil projeler için, üçüncü taraf fork'ların iş akışına erişimini kısıtlamak kritik önem taşır. pull_request_target ayarını dikkatli kullanın — fork'tan değil, taban daldan kodu yürütür. iOS uygulama kod imzalaması için sertifikaların şifrelenmiş olarak saklanması ve yalnızca derleme aşamasında gpg veya openssl aracılığıyla şifrelerinin çözülmesi önerilir.
Sıkça Sorulan Sorular
Herkese açık depolar için GitHub Actions ücretsizdir aylık 2000 dakika sınırıyla. Ücretsiz plandaki özel depolar için — 500 dakika. Team ve Enterprise planları sırasıyla 3000 ve 50000 dakika içerir.
iOS derlemeleri için macOS runner gerekir (macos-13, macos-14 veya macos-latest). Yalnızca macOS'ta iOS için Xcode ve kod imzalama araçları bulunur. Android derlemeleri hem Linux hem de macOS'ta çalıştırılabilir.
Secret'lar, deponun Settings → Secrets and variables → Actions bölümünde yapılandırılır. İş akışlarında ${{ secrets.MY_SECRET }} sözdizimiyle kullanılır. Secret'lar şifrelenir ve günlüklerde görüntülenmez — yalnızca iş akışı yürütme sırasında kullanılabilir.
Evet, topluluğun act aracı aracılığıyla. İş akışlarını Docker kapsayıcılarında yerel olarak çalıştırır. Bu, göndermeden önce hata ayıklama için yararlıdır, ancak macOS'a özgü adımlar (Xcode derlemeleri) desteklenmez.
on: push: paths: [“src/**”, “*.gradle”] bölümünde paths filtresini kullanın. İş akışı yalnızca belirtilen dizinlerde değişiklik olduğunda çalışır. Ters filtre paths-ignore yolları hariç tutar.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun