DevOps ir CI/CD Mobilioms Aplikacijoms: Automatizacijos Vadovas

DevOps ir CI/CD mobilioms aplikacijoms

"Kiekvieną penktadienį sėdėdavau iki vėlyvo vakaro, rankiniu būdu buildinant ir uploadinant aplikacijas į App Store ir Google Play." Taip prieš trejus metus atrodė mano release procesas. Dabar? Push į main branch ir po 30 minučių aplikacija jau review eilėje.

CI/CD mobilioms aplikacijoms pakeitė mano darbo būdą. Nebe "deploy day" stresas, o nuolatinis, patikimas procesas. Šiame straipsnyje pasidalinsiu tuo, ką išmokau per dešimtis projektų.

Kodėl CI/CD Mobilioms Aplikacijoms?

Mobilių aplikacijų release procesas yra sudėtingas:

  • Dvi platformos - iOS ir Android su skirtingais build procesais
  • Code signing - sertifikatai, provisioning profiles, keystores
  • Store reikalavimai - screenshots, metadata, privacy policies
  • Testavimas - unit, integration, UI testai

Rankinis procesas užima 2-4 valandas per release. Su CI/CD - 0 valandų rankinio darbo.

Mano Rezultatai

Po CI/CD įdiegimo vienam projektui:

  • Release laikas: 4h → 30min (automatiškai)
  • Release dažnumas: kas 2 savaites → kas dieną
  • Bug'ai produkcijoje: -60%
  • Kūrėjų laimės indeksas: +100% (nebereikia penktadienių OT)

CI/CD Įrankių Palyginimas

Įrankis Kaina iOS Android Flutter
Codemagic 500 min/mėn nemokama Puiku Puiku Specializuota
GitHub Actions 2000 min/mėn nemokama Gerai Puiku Gerai
Bitrise Nuo $90/mėn Puiku Puiku Gerai
CircleCI Nuo $30/mėn Gerai Puiku Gerai

Mano rekomendacija: Flutter projektams - Codemagic. Native projektams - GitHub Actions (jei jau naudojate GitHub).

Fastlane: Automatizacijos Pagrindas

Fastlane yra open-source įrankis, kuris automatizuoja mobilių aplikacijų build ir release procesus. Jis veikia su bet kuriuo CI/CD įrankiu.

iOS su Fastlane

Fastfile Pavyzdys (iOS)

lane :beta do
  increment_build_number
  build_app(scheme: "MyApp")
  upload_to_testflight
end

Ši viena komanda:

  1. Padidina build numerį
  2. Sukuria .ipa failą
  3. Uploadina į TestFlight
  4. Informuoja testerius

Android su Fastlane

Fastfile Pavyzdys (Android)

lane :beta do
  gradle(task: "bundleRelease")
  upload_to_play_store(
    track: "internal",
    aab: "app/build/outputs/bundle/release/app-release.aab"
  )
end

Code Signing: Didžiausias Iššūkis

Code signing yra ta vieta, kur dauguma žmonių "įstringa". Štai kaip tai išsprendžiau:

iOS Code Signing

Dažniausia Klaida

Sertifikatai saugomi lokaliame Mac'e. Kai kitas kūrėjas ar CI serveris bando buildin - "Code signing error".

Sprendimas: Fastlane Match

  • Visi sertifikatai ir profiles saugomi Git repo (užšifruoti)
  • Bet kuris kūrėjas ar CI gali juos atsisiųsti
  • Vienas šaltinis tiesos - nebėra "pas mane veikia"

Android Code Signing

Android yra paprastesnis - tik keystore failas ir slaptažodžiai. Saugokite juos CI/CD secrets:

  • GitHub: Repository secrets
  • Codemagic: Environment variables (encrypted)
  • NIEKADA necommitinkite keystore į Git!

Testavimo Automatizacija

CI/CD be testų - tik pusė naudos. Štai ką testuoju automatiškai:

1. Unit Testai

Kiekviename PR. Jei failina - PR nemerginamas.

2. Integration Testai

Prieš kiekvieną release į TestFlight/Internal Track.

3. UI Testai

Critical flows: login, checkout, main features. Naudoju:

  • iOS: XCUITest
  • Android: Espresso
  • Flutter: integration_test package

Testavimo Piramidė

70% unit testų (greiti, daug)
20% integration testų (vidutiniai)
10% UI testų (lėti, bet svarbūs)

GitHub Actions Workflow Pavyzdys

Flutter CI/CD su GitHub Actions

name: Build & Deploy
on: push: branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: subosito/flutter-action@v2
      - run: flutter test

  build-ios:
    needs: test
    runs-on: macos-latest
    # ... iOS build steps

Kiek Tai Kainuoja?

Scenarijus Mėnesinė kaina Pastabos
Solo kūrėjas 0-50€ Free tiers pakanka
Maža komanda (2-5) 50-150€ Codemagic/Bitrise starter
Vidutinė komanda (5-15) 200-500€ Pro planai su parallelization

Ką Daryti Šiandien?

Pradėkite Nuo Šių Žingsnių

  1. Įdiekite Fastlane - net jei dar nenaudosite CI/CD, jis padės lokaliems buildams
  2. Sukurkite bent vieną lane - pvz. fastlane beta TestFlight/Internal uploadui
  3. Išspręskite code signing - Match iOS, secrets Android
  4. Pridėkite testus - bent unit testai prieš kiekvieną PR
  5. Pasirinkite CI/CD - pradėkite su nemokamu planu

Reikia Pagalbos su CI/CD?

Padedu sukurti ir konfigūruoti CI/CD pipeline'us mobilioms aplikacijoms.

Susisiekti

Dažniausiai užduodami klausimai (DUK)

Kiek laiko sutaupo CI/CD mobiliai aplikacijai?
Po CI/CD įdiegimo viename projekte release laikas sumažėjo nuo 4 valandų iki 30 minučių (automatiškai), release dažnumas - nuo kas 2 savaites iki kas dieną, o bug'ų produkcijoje sumažėjo 60%. Rankinis procesas paprastai užima 2-4 valandas per release.
Kuris CI/CD įrankis tinka Flutter projektui?
Flutter projektams rekomenduoju Codemagic (500 min/mėn nemokama, specializuota Flutter platformai). Native iOS/Android projektams, jei jau naudojate GitHub - GitHub Actions (2000 min/mėn nemokama). Bitrise prasideda nuo $90/mėn, CircleCI nuo $30/mėn.
Kaip išspręsti iOS code signing problemą CI serveryje?
Sprendimas yra Fastlane Match - visi sertifikatai ir provisioning profiles saugomi Git repozitorijoje (užšifruoti), todėl bet kuris kūrėjas ar CI gali juos atsisiųsti. Tai pašalina problemas, kai sertifikatai saugomi tik viename Mac kompiuteryje.
Kiek kainuoja CI/CD mažai komandai?
Solo kūrėjui paprastai pakanka 0-50€/mėn (nemokami tier'ai). Mažai 2-5 žmonių komandai - 50-150€/mėn (Codemagic ar Bitrise starter planai). Vidutinei 5-15 žmonių komandai - 200-500€/mėn (Pro planai su parallelization).
Kokia testavimo struktūra optimaliausia mobiliai aplikacijai?
Rekomenduoju testavimo piramidę: 70% unit testų (greiti, daug), 20% integration testų (vidutiniai) ir 10% UI testų (lėti, bet svarbūs). UI testams naudoju XCUITest iOS, Espresso Android ir integration_test package Flutter projektuose.