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 για την ασφαλή αποθήκευση ευαίσθητων δεδομένων.