GitHub Actions GitHub daxilində yerləşdirilmiş CI/CD və avtomatlaşdırma platformasıdır. O, mobil tətbiqlərin kompilasiya, test və yerləşdirməsini birbaşa repozitoriyadan işə salmağa imkan verir. GitHub, 2024 məlumatlarına görə, platforma özündə 15 000-dən çox hazır action daxildir ki, bunlar da inkişafın lintingdən tətbiq mağazalarında nəşrə qədər bütün mərhələlərini əhatə edir.
Başlıca
GitHub Actions 2019-cu ildə işə salınmış, GitHub daxilində yerləşən iş axını avtomatlaşdırma platformasıdır. O, CI/CD pipeline’larını birbaşa repozitoriyada saxlanılan YAML fayllarında təyin etməyə imkan verir. Hər bir workflow tetikleyici vasitəsilə işə salınır: push, pull request, tag yaradılması və ya cədvəl üzrə. Jenkins və ya TeamCity-dən fərqli olaraq, CI serverinin hostinqi üçün ayrıca infrastruktur tələb olunmur.
Mobil tətbiq inkişafı kontekstində GitHub Actions APK və IPA kompilasiyasını, emulyatorlarda vahid və UI testlərini işə salmağı, kodun linterlərlə yoxlanılmasını, imzalanmasını və Google Play və App Store-da nəşrini avtomatlaşdırır. Platforma ictimai repozitoriyalar üçün pulsuz dəqiqələr və özəl repozitoriyalar üçün tarif planından asılı olaraq dəqiqələr təqdim edir. Open-source mobil layihələr üçün bu, heç bir xərc olmadan tam dəyərli CI/CD həllidir.
GitHub Actions arxitekturası dörd səviyyədən ibarətdir. Workflow avtomatlaşdırmanı təyin edən kök YAML faylıdır. Workflow Jobs-dan ibarətdir, hər bir Job ayrıca Runner-da yerinə yetirilir. Job daxilində Steps yerinə yetirilir — ardıcıl əmrlər və ya xarici actionlar. Events işə salma tetikleyicilərini təyin edir: push, pull_request, schedule, workflow_dispatch. Workflow həmçinin GitHub interfeysindəki Actions sekmesi vasitəsilə əl ilə çağırıla bilər.
GitHub əvvəlcədən quraşdırılmış ƏS-lərlə host edilən runnerlar təqdim edir: Ubuntu, macOS və Windows. iOS kompilasiyası üçün macOS runner, Android üçün Linux və ya macOS tələb olunur. Self-hosted runnerlar xüsusi avadanlıq tələbləri olan böyük layihələr üçün faydalı olan, fərdi mühitlə öz serverlərində işləri yerinə yetirməyə imkan verir. GitHub həmçinin işlərin icra növbəsini təşkil etmək üçün self-hosted runner qruplarını dəstəkləyir.
Əsas workflow faylı bölmələri ehtiva edir: name, on (tətikləyicilər), jobs. Hər bir job runs-on (runner növü), strategy (matrisa), steps (hərəkətlərin siyahısı) göstərir. Steps shell əmrləri və ya owner/repo@version sintaksisi ilə qoşulan marketplace-dən hazır actionlar ola bilər.
Android kompilasiyası üçün workflow adətən addımları əhatə edir: repozitoriyanın checkout-u, JDK-nın quraşdırılması, Gradle keşinin konfiqurasiyası, assembleRelease-in işə salınması. iOS üçün macOS runner, xcode-select vasitəsilə Xcode-un quraşdırılması, provisioning profile-in konfiqurasiyası və xcodebuild-in işə salınması tələb olunur. iOS kompilasiyasının mürəkkəbliyi code signing və sertifikatların idarə edilməsi ilə bağlıdır. Apple-a xas parametrlərə apple-actions/import-codesign-certs vasitəsilə provisioning profile-in idarə edilməsi daxildir.
Matrix strategy kompilasiyanı eyni anda bir neçə versiyada işə salmağa imkan verir. Məsələn: iOS (15.0, 16.0, 17.0) və Xcode (14, 15) versiyaları ilə matrisa. Bu, tətbiqin müxtəlif ƏS versiyaları ilə uyğunluğunun yoxlanılmasını sürətləndirir, baxmayaraq ki, runner dəqiqələrinin istehlakını artırır. Məhdud CI büdcəsi olan layihələr üçün matrisa yalnız əsas konfiqurasiyalarla məhdudlaşdırıla bilər.
GitHub Actions JDK-nın quraşdırılması üçün setup-java action‑ı və Gradle-in keşlənməsi üçün caching təqdim edir. Android SDK artıq Ubuntu runnerlarında əvvəlcədən quraşdırılıb. Xüsusi API səviyyələri üçün ayrıca addımda sdkmanager istifadə olunur. Android və iOS kompilasiyası üçün ayrı workflow yaratmaq tövsiyə olunur, çünki onlar müxtəlif runnerlar və kompilasiya alətlərindən istifadə edir.
GitHub Marketplace icma və rəsmi tərtibatçılar tərəfindən yaradılmış 15 000-dən çox action ehtiva edir. Mobil inkişaf üçün əsas kateqoriyalar: Code signing (apple-actions/import-codesign-certs), test (react-native-community/action), yerləşdirmə (google-github-actions/release-google-play), bildirişlər (slackapi/slack-github-action). Firebase App Distribution, TestFlight upload və Fastlane üçün də actionlar mövcuddur. Hər bir action müəyyən runner ƏS-si ilə uyğunluq etiketinə malikdir.
Hər bir action versiya, təsvir, README və lisenziyaya malikdir. Action seçərkən satıcılardan (Google, Apple, Microsoft) rəsmi olanlar və Verified Badge ilə təsdiqlənmişlər üstünlük təşkil edir. Gözlənilməz dəyişikliklərin qarşısını almaq üçün @main deyil, sabit əsas versiyanı (actions/checkout@v4) göstərmək vacibdir. Lazım olan action Marketplace-də yoxdursa, fərdi action yaradıla bilər — lokal olaraq repozitoriyada (Docker action və ya JavaScript action) və ya Marketplace-də dərc edilə bilər.
iOS tətbiqləri hazırlayarkən simulyatorlar və cihazlarla düzgün işi qurmaq vacibdir. macOS-14 runner ARM arxitekturasında Intel kompilasiyalarını işə salmaq üçün Rosetta 2 mühitini təmin edir. Workflow bir neçə kompilasiya sxemini əhatə edə bilər — pull request üçün Debug və taglər üçün Release. GitHub Actions test nəticələrini göstərmək üçün xcparse/sonarqube action vasitəsilə xcresult parsingsini dəstəkləyir. Kompilasiya statusu barədə bildirişlər göndərmək üçün Slack və ya Telegram action əlavə edilə bilər.
iOS üçün code signing sertifikatların və provisioning profiles-in importunu tələb edir. Apple-actions P12 sertifikatının importu və provisioning profile-in quraşdırılması üçün addım təqdim edir. Sertifikatlar GitHub Actions məxfi məlumatları kimi saxlanılır və yalnız kompilasiya mərhələsində şifrələnir. İmzanın avtomatlaşdırılması üçün workflow-da ayrıca addım kimi çağrıla bilən Fastlane match istifadə olunur.
Swift-də iOS tətbiqi üçün layihəni yığan, testləri işə salan və arxivləşdirilmiş kompilasiya yaradan workflowu nəzərdən keçirək. Workflow macOS-14 runner, Xcode 15.4 və sertifikatların idarə edilməsi üçün actionlardan istifadə edir.
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
Keşləmə kompilasiya vaxtını qısaldır, asılılıqları workflow işə salmaları arasında saxlayır. GitHub actions/cache vasitəsilə daxili keşləmə təqdim edir. Gradle üçün ~/.gradle, CocoaPods üçün Pods/, SPM üçün .build/ keşlənir. Keş açarı asılılıqlar siyahısı olan faylın hashini ehtiva edir — asılılıqlar dəyişdikdə keş avtomatik etibarsızlaşdırılır.
Keşin bərpası strategiyasına (restore-keys) xüsusi diqqət yetirilməlidir. Dəqiq açar tapılmazsa, GitHub Actions restore-keys üzrə qismən uyğunluğu sınayır. Bu, yalnız bir asılılıq dəyişdikdə faydalıdır — keş qismən istifadəyə yararlı qalır. Gradle üçün əlavə olaraq layihənin müxtəlif modulları arasında kompilasiya nəticələrini keşləyən Gradle Build Cache-in aktivləşdirilməsi tövsiyə olunur.
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle*') }}
Keşləmənin effektivliyi Android layihələri üçün: keşsiz ilk kompilasiya — 8–12 dəqiqə, keşlə təkrar — 2–4 dəqiqə. CocoaPods ilə iOS üçün qənaət oxşardır. Keşlərin optimal idarə edilməsi üçün actions/cache-in Gradle-dən setup-gradle action ilə birləşdirilməsi tövsiyə olunur. React Native-də npm asılılıqları üçün actions/cache package-lock.json faylının hashingi ilə istifadə olunur. Düzgün keşləmə konfiqurasiyası ilə kompilasiya vaxtını 70%-ə qədər azaltmaq mümkündür.
GitHub Actions workflow, job və step səviyyəsində mühit dəyişənlərini dəstəkləyir. Mühit dəyişənləri ləğv edilə bilər: step səviyyəsi ən yüksək prioritetə malikdir. Məxfi məlumatlar üçün həmişə məxfi açarlardan istifadə edin — onlar AES-256 ilə şifrələnir və jurnallarda göstərilmir. Həmçinin mühitin qorunması qaydaları mövcuddur — yerləşdirməni işə salmazdan əvvəl məcburi əl təsdiqi. Əlavə təhlükəsizlik üçün müəyyən istifadəçilərdən və ya komandalardan məcburi təsdiq konfiqurasiya edilə bilər.
GitHub Actions həmçinin Reusable Workflows-u dəstəkləyir — digər workflow-lardan çağrıla bilən təkrar istifadə edilə bilən pipeline-lar. Bu, mərkəzləşdirilmiş kompilasiya workflow-u yaratmağa və onu təşkilatın bütün repozitoriyalarında istifadə etməyə imkan verir. Reusable workflow bir sətirlə çağrılır və giriş parametrləri və məxfi məlumatlar qəbul edə bilər. Bu, xüsusilə böyük komandalarda CI/CD təcrübələrini standartlaşdırmaq üçün faydalıdır.
Mobil layihələr üçün GitHub Actions qurarkən təhlükəsizlik prinsiplərinə riayət etmək vacibdir. OIDC (OpenID Connect) uzunmüddətli etimadnamələrdən imtina etməyə və bulud provayderləri üçün müvəqqəti tokenlər əldə etməyə imkan verir. Skriptlərdə məxfi məlumatları düz mətndə istifadə etməyin — GitHub Actions məxfi məlumatları jurnallarda avtomatik maskalayır.
Mobil layihələr üçün üçüncü tərəf fork-larının workflow-a girişini məhdudlaşdırmaq kritik əhəmiyyət kəsb edir. pull_request_target parametrindən ehtiyatla istifadə edin — o, fork-dan deyil, əsas budaqdan kodu icra edir. iOS tətbiqləri üçün code signing-də sertifikatların şifrələnmiş formada saxlanılması və yalnız kompilasiya mərhələsində gpg və ya openssl vasitəsilə şifrəsinin açılması tövsiyə olunur.
Tez-tez verilən suallar
İctimai repozitoriyalar üçün GitHub Actions pulsuzdur ayda 2000 dəqiqə limiti ilə. Özəl repozitoriyalar üçün pulsuz planda — 500 dəqiqə. Team və Enterprise planları müvafiq olaraq 3000 və 50000 dəqiqəni əhatə edir.
iOS kompilasiyası üçün macOS runner tələb olunur (macos-13, macos-14 və ya macos-latest). Yalnız macOS-da Xcode və iOS üçün code signing alətləri mövcuddur. Android kompilasiyası həm Linux, həm də macOS-da yerinə yetirilə bilər.
Məxfi məlumatlar Settings → Secrets and variables → Actions repozitoriyasında konfiqurasiya edilir. Workflow-da ${{ secrets.MY_SECRET }} sintaksisi ilə istifadə olunur. Məxfi məlumatlar şifrələnir və jurnallarda göstərilmir — onlar yalnız workflow-un icrası zamanı əlçatandır.
Bəli, icma act aləti vasitəsilə. O, workflow-u lokal olaraq Docker konteynerlərində işə salır. Bu, commit-dən əvvəl debug etmək üçün faydalıdır, lakin macOS-a xas addımlar (Xcode kompilasiyası) dəstəklənmir.
on: push: paths: ["src/**", "*.gradle"] bölməsində paths filtrindən istifadə edin. Workflow yalnız göstərilən qovluqlarda dəyişikliklər olduqda işə salınacaq. Əks filtr paths-ignore yolları istisna edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun