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 # მხოლოდ ტეგებით გამოქვეყნება