Middle+
Mobil tətbiqlər üçün CI/CD inkişafında təcrübəniz nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Mobil tətbiqlər üçün CI/CD kəmərlərinin qurulması təcrübəm var (iOS və Android).
Əsas mərhələlərdə işlədim:
- Yığma: iOS üçün Xcodebuild və Android üçün Gradle istifadə etmək. Yığma sistemləri ilə inteqrasiya (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions).
- Test: Birlik testlərinin, inteqrasiya testlərinin, UI testlərinin simulasiya/emulyatorlarda və ya real cihazlarda işlədilməsi (Firebase Test Lab, BrowserStack, Device Farm ilə).
- İmzalama: Tətbiqlərin yayımlanması üçün imzalama prosesinin avtomatlaşdırılması (Code Signing Identities, iOS üçün Provisioning Profiles; Android üçün Keystore).
- Paylama:
- Daxili yığmalar: iOS üçün TestFlight və Android üçün Firebase App Distribution/Internal Test Tracks istifadə etmək.
- Mağazalara yayımlama: Fastlane və ya iTunes Connect Transporter vasitəsilə App Store Connect-ə artefaktların yüklənməsi və Google Play Store-ə Google Play Developer API və ya Fastlane ilə yükləmə.
İstifadə etdiyim alətlər:
- CI/CD sistemləri: Jenkins, GitLab CI/CD, GitHub Actions.
- Yığma/yayım avtomatlaşdırma alətləri: Fastlane, Gradle, Xcodebuild.
- Asılılıqların idarə olunması: CocoaPods, Carthage (iOS üçün); Gradle Dependency Management (Android üçün).
- Test alətləri: XCTest, EarlGrey, Appium, Espresso, UI Automator.
- Bulud test xidmətləri: Firebase Test Lab, BrowserStack.
- Versiya idarəetmə sistemləri: Git.
Qısa pipeline nümunəsi (sadələşdirilmiş):
# .gitlab-ci.yml GitLab CI/CD üçün nümunə
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 # Xüsusi macOS/Xcode runner tələb edir
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
Yardımçı olaraq, yığma vaxtını optimallaşdırmaq, Flaky Tests-i azaltmaq və pipeline statusu barədə bildirişlər qurmaq üzərində kömək edə bilərəm. İmza təhlükəsizliyi və sertifikatların/anahtarların idarə olunmasına xüsusi diqqət yetirirəm. Hissəsiz məlumatların təhlükəsiz saxlanması üçün CI/CD sistemlərində gizli dəyişənlərdən istifadə etdim.