Middle+
Мобилдик тиркемелер үчүн CI/CD өнүктүрүүдө кандай тажрыйбаңыз бар?
sobes.tech AI
AIден жооп
Мен мобилдик тиркемелер үчүн CI/CD конвейерлерин түзүүдө тажрыйбага ээмин (iOS жана Android).
Иштеген негизги этаптар:
- Жыйноо: iOS үчүн Xcodebuild жана Android үчүн Gradle колдонуу. Жыйноо системалары менен интеграция (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions).
- Тестирлөө: Юнит тесттерди, интеграциялык тесттерди, UI тесттерди симуляторлордо/эмуляторлордо же реалдуу түзмөктөрдө иштетүү (Firebase Test Lab, BrowserStack, Device Farm аркылуу).
- Кол коюу: Тиркемелерди жарыкка чыгаруу үчүн автоматташтыруу (Code Signing Identities, Provisioning Profiles iOS үчүн; Keystore Android үчүн).
- Таратуу:
- Ички жыйноолор: iOS үчүн TestFlight жана Android үчүн Firebase App Distribution/Internal Test Tracks колдонуу.
- Дүкөндөргө жарыялоо: Артефактарды 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 жаңыртуу && apt-get орнотуу -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
скрипт:
- ./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
only:
- tags # Дүкөнгө гана тэгдер менен чыгуу
deploy_ios_app_store:
этап: deploy_store
сүрөт: macos_runner
алдын-ала скрипт:
- cd ios
скрипт:
- bundle exec fastlane deliver
only:
- tags # Дүкөнгө гана тэгдер менен чыгуу
Жумушумдун негизги багыттары — куруу убактысын оптималдаштыруу, Flaky Tests-тин санын азайтуу, пайплайндын абалы тууралуу кабарлоо жөндөөлөрү. Подписка жана сертификаттарды башкаруу боюнча коопсуздукка өзгөчө көңүл бөлдүм. CI/CD системаларында сырсөздөрдү сактоо үчүн сырдуу өзгөрмөлөрдү колдонуп келдим.