Sobes.tech
Middle+

რა გამოცდილება გაქვთ მობილური აპლიკაციების CI/CD-ის განვითარების სფეროში?

sobes.tech AI

პასუხი AI-სგან

მე მაქვს გამოცდილება CI/CD ნაკადების შექმნაში მობილური აპლიკაციებისათვის (iOS და Android).

მთავარი ეტაპები, რომელზეც მუშაობა გავიარე:

  • შენახვა: Xcodebuild-ის გამოყენება iOS-ისთვის და Gradle-ის Android-ისთვის. ინტეგრაცია build სისტემებთან (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions).
  • ტესტირება: ერთეულ ტესტების, ინტეგრაციული ტესტების, UI ტესტების გაშვება სიმულატორებზე/ემულატორებზე ან რეალურ მოწყობილობებზე (Firebase Test Lab, BrowserStack, Device Farm-ის საშუალებით).
  • ხელმოწერა: აპლიკაციების ხელმოწერის პროცესის ავტომატიზაცია (Code Signing Identities, Provisioning Profiles iOS-ისთვის; Keystore Android-ისთვის).
  • გავრცელება:
    • შიდა გაერთიანებები: TestFlight-ის გამოყენება iOS-ისთვის და Firebase App Distribution/Internal Test Tracks Android-ისთვის.
    • მაღაზიებში გამოქვეყნება: არტეფაქტების ავტომატური ატვირთვა App Store Connect-ში Fastlane-ის ან iTunes Connect Transporter-ის საშუალებით და Google Play Store-ში Google Play Developer API-ის ან Fastlane-ის გამოყენებით.

ინსტრუმენტები, რომელთაც ვმუშაობდი:

  • CI/CD სისტემები: Jenkins, GitLab CI/CD, GitHub Actions.
  • ავტომატიზაციის ინსტრუმენტები: Fastlane, Gradle, Xcodebuild.
  • დამოკიდებულებების მართვა: CocoaPods, Carthage iOS-ისთვის; Gradle Dependency Management Android-ისთვის.
  • ტესტირების ინსტრუმენტები: XCTest, EarlGrey, Appium, Espresso, UI Automator.
  • კლაუდის ტესტირების სერვისები: Firebase Test Lab, BrowserStack.
  • ვერსიების კონტროლის სისტემები: Git.

პაიპლაინი (სადაც შესაძლებელია გამარტივება):

# .gitlab-ci.yml მაგალითი GitLab CI/CD-ისთვის

საფეხურები:
  - build
  - test
  - deploy_internal
  - deploy_store

ცვლადები:
  ANDROID_BUILD_TOOLS: "30.0.3"
  ANDROID_SDK_ROOT: "$CI_PROJECT_DIR/android-sdk"

კეში:
  გზები:
    - ~/.gradle/caches
    - ~/.gradle/wrapper
    - Pods/

build_android:
  ეტაპი: build
  სურათი: openjdk:11-jdk-slim
  ცვლადები:
    GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  წინასწარი სკრიპტი:
    - apt-get update && apt-get install -y unzip
    - mkdir $ANDROID_SDK_ROOT
    - wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
    - unzip commandlinetools-linux-7583922_latest.zip -d $ANDROID_SDK_ROOT
    - დიახ | $ANDROID_SDK_ROOT/cmdline-tools/bin/sdkmanager --licenses
    - $ANDROID_SDK_ROOT/cmdline-tools/bin/sdkmanager "platforms;android-30" "build-tools;$ANDROID_BUILD_TOOLS"
    - ექსპორტი PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/bin:$ANDROID_SDK_ROOT/platform-tools
    - cd android
  სკრიპტი:
    - ./gradlew assembleRelease
  არქივები:
    გზები:
      - android/app/build/outputs/apk/release/*.apk

build_ios:
  ეტაპი: build
  სურათი: macos_runner # სჭირდება სპეციფიკური macOS/Xcode რანერი
  წინასწარი სკრიპტი:
    - gem install bundler
    - cd ios
    - bundle install
  სკრიპტი:
    - bundle exec fastlane build release
  არქივები:
    გზები:
      - ios/*.ipa # ან სხვა fastlane-ის გამოსავალი

test_android_unit:
  ეტაპი: test
  სურათი: openjdk:11-jdk-slim
  წინასწარი სკრიპტი:
    - cd android
  სკრიპტი:
    - ./gradlew testReleaseUnitTest

test_ios_unit:
  ეტაპი: test
  სურათი: macos_runner
  წინასწარი სკრიპტი:
    - pod install # თუ გამოიყენება CocoaPods
    - cd ios
  სკრიპტი:
    - xcodebuild test -project YourApp.xcodeproj -scheme YourApp -destination 'platform=iOS Simulator,name=iPhone 12'

deploy_android_firebase:
  ეტაპი: deploy_internal
  სურათი: openjdk:11-jdk-slim
  წინასწარი სკრიპტი:
    - apt-get update && apt-get install -y curl
    - curl -sL https://firebase.tools | bash
    - cd android
  სკრიპტი:
    - firebase appdistribution:distribute app/build/outputs/apk/release/*.apk --app <firebase-app-id> --token $FIREBASE_TOKEN --release-notes "Автоматიზირებული ბილდი ${CI_PIPELINE_IID}" --testers-file ../testers.txt

deploy_ios_testflight:
  ეტაპი: deploy_internal
  სურათი: macos_runner
  წინასწარი სკრიპტი:
    - cd ios
  სკრიპტი:
    - bundle exec fastlane pilot upload

deploy_android_play_store:
  ეტაპი: deploy_store
  სურათი: openjdk:11-jdk-slim
  წინასწარი სკრიპტი:
     - apt-get update && apt-get install -y python3 python3-pip
     - pip3 install google-api-python-client oauth2client
     - cd android
  სკრიპტი:
     - echo "$GOOGLE_PLAY_KEY_JSON" | base64 --decode > service_account_key.json
     - bundle exec fastlane supply
  მხოლოდ:
    - tags # მხოლოდ ტეგებით გამოქვეყნება

deploy_ios_app_store:
  ეტაპი: deploy_store
  სურათი: macos_runner
  წინასწარი სკრიპტი:
    - cd ios
  სკრიპტი:
    - bundle exec fastlane deliver
  მხოლოდ:
    - tags # მხოლოდ ტეგებით გამოქვეყნება