Sobes.tech
Middle+

Ποια είναι η εμπειρία σας στην ανάπτυξη CI/CD για κινητές εφαρμογές;

sobes.tech AI

Απάντηση από AI

Έχω εμπειρία στην κατασκευή pipelines CI/CD για εφαρμογές κινητών (iOS και Android).

Τα βασικά στάδια με τα οποία έχω εργαστεί:

  • Κατασκευή: Χρήση του Xcodebuild για iOS και του Gradle για Android. Ενσωμάτωση με συστήματα κατασκευής (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions).
  • Δοκιμές: Εκτέλεση μονάδων, ολοκληρωμένων και UI δοκιμών σε simulators/emulators ή πραγματικές συσκευές (με Firebase Test Lab, BrowserStack, Device Farm).
  • Υπογραφή: Αυτοματοποίηση της διαδικασίας υπογραφής εφαρμογών για δημοσίευση (Code Signing Identities, Provisioning Profiles για iOS; Keystore για Android).
  • Διανομή:
    • Εσωτερικές κατασκευές: Χρήση TestFlight για iOS και Firebase App Distribution/Internal Test Tracks για Android.
    • Δημοσίευση σε καταστήματα: Αυτοματοποίηση της φόρτωσης των artifacts στο 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.
  • Υπηρεσίες δοκιμών στο cloud: Firebase Test Lab, BrowserStack.
  • Συστήματα ελέγχου εκδόσεων: Git.

Παραδείγματα pipeline (απλοποιημένα):

# .gitlab-ci.yml παράδειγμα για GitLab CI/CD

stages:
  - build
  - test
  - deploy_internal
  - deploy_store

variables:
  ANDROID_BUILD_TOOLS: "30.0.3"
  ANDROID_SDK_ROOT: "$CI_PROJECT_DIR/android-sdk"

cache:
  paths:
    - ~/.gradle/caches
    - ~/.gradle/wrapper
    - Pods/

build_android:
  stage: build
  image: openjdk:11-jdk-slim
  variables:
    GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  before_script:
    - 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
    - yes | $ANDROID_SDK_ROOT/cmdline-tools/bin/sdkmanager --licenses
    - $ANDROID_SDK_ROOT/cmdline-tools/bin/sdkmanager "platforms;android-30" "build-tools;$ANDROID_BUILD_TOOLS"
    - export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/bin:$ANDROID_SDK_ROOT/platform-tools
    - cd android
  script:
    - ./gradlew assembleRelease
  artifacts:
    paths:
      - android/app/build/outputs/apk/release/*.apk

build_ios:
  stage: build
  image: macos_runner # Απαιτεί συγκεκριμένο macOS/Xcode runner
  before_script:
    - gem install bundler
    - cd ios
    - bundle install
  script:
    - bundle exec fastlane build release
  artifacts:
    paths:
      - ios/*.ipa

test_android_unit:
  stage: test
  image: openjdk:11-jdk-slim
  before_script:
    - cd android
  script:
    - ./gradlew testReleaseUnitTest

test_ios_unit:
  stage: test
  image: macos_runner
  before_script:
    - pod install
    - cd ios
  script:
    - xcodebuild test -project YourApp.xcodeproj -scheme YourApp -destination 'platform=iOS Simulator,name=iPhone 12'

deploy_android_firebase:
  stage: deploy_internal
  image: openjdk:11-jdk-slim
  before_script:
    - apt-get update && apt-get install -y curl
    - curl -sL https://firebase.tools | bash
    - cd android
  script:
    - firebase appdistribution:distribute app/build/outputs/apk/release/*.apk --app <firebase-app-id> --token $FIREBASE_TOKEN --release-notes "Automated build ${CI_PIPELINE_IID}" --testers-file ../testers.txt

deploy_ios_testflight:
  stage: deploy_internal
  image: macos_runner
  before_script:
    - cd ios
  script:
    - bundle exec fastlane pilot upload

deploy_android_play_store:
  stage: deploy_store
  image: openjdk:11-jdk-slim
  before_script:
     - apt-get update && apt-get install -y python3 python3-pip
     - pip3 install google-api-python-client oauth2client
     - cd android
  script:
     - echo "$GOOGLE_PLAY_KEY_JSON" | base64 --decode > service_account_key.json
     - bundle exec fastlane supply
  only:
    - tags

deploy_ios_app_store:
  stage: deploy_store
  image: macos_runner
  before_script:
    - cd ios
  script:
    - bundle exec fastlane deliver
  only:
    - tags

Μπορώ να βοηθήσω στη βελτίωση του χρόνου κατασκευής, στη μείωση των Flaky Tests και στη ρύθμιση ειδοποιήσεων κατάστασης pipeline. Δίνω ιδιαίτερη έμφαση στην ασφάλεια της υπογραφής και στη διαχείριση πιστοποιητικών/κλειδιών. Χρησιμοποιώ μυστικές μεταβλητές στα συστήματα CI/CD για την ασφαλή αποθήκευση ευαίσθητων δεδομένων.