Sobes.tech
Middle+

Ի՞նչ փորձ ունեք մոբայլ հավելվածների CI/CD զարգացման ոլորտում։

sobes.tech AI

Պատասխան AI-ից

Նաև փորձ ունի CI/CD շղթաների կառուցման մեջ մոբայլ հավելվածների համար (iOS և Android):

Հիմնական փուլերը, որոնց վրա աշխատել եմ՝

  • Կառուցում: Xcodebuild- ի օգտագործում iOS-ի համար և Gradle- ի համար Android-ի։ Կառուցման համակարգերի ինտեգրում (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 # Պահանջվում է միայն տեգերով հրապարակելու համար

Աշխատել եմ կառուցման ժամանակը օպտիմալացնելու, Flaky Tests- ի նվազեցման, պայլայնի կարգավիճակի մասին ծանուցումների կարգավորումների վրա: Աշխատել եմ ստորագրության անվտանգության և սերտիֆիկատների/հեղինակների կառավարման վրա: Օգտագործել եմ գաղտնի փոփոխականներ CI/CD համակարգերում զգայուն տվյալների պահպանման համար։