Middle+
Quelle est votre expérience dans le développement de CI/CD pour les applications mobiles?
sobes.tech IA
Réponse de l'IA
J'ai de l'expérience dans la construction de pipelines CI/CD pour les applications mobiles (iOS et Android).
Étapes clés sur lesquelles j'ai travaillé:
- Construction: Utilisation de Xcodebuild pour iOS et Gradle pour Android. Intégration avec des systèmes de build (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions).
- Tests: Exécution de tests unitaires, tests d'intégration, tests UI sur simulateurs/emulateurs ou appareils réels (avec Firebase Test Lab, BrowserStack, Device Farm).
- Signature: Automatisation du processus de signature des applications pour la publication (Identités de signature de code, profils d'approvisionnement pour iOS; Keystore pour Android).
- Distribution:
- Builds internes: Utilisation de TestFlight pour iOS et Firebase App Distribution/Inner Test Tracks pour Android.
- Publication dans les magasins: Automatisation du téléchargement des artefacts dans App Store Connect via Fastlane ou iTunes Connect Transporter et dans Google Play Store via Google Play Developer API ou Fastlane.
Outils avec lesquels j'ai travaillé:
- Systèmes CI/CD: Jenkins, GitLab CI/CD, GitHub Actions.
- Outils d'automatisation de build/déploiement: Fastlane, Gradle, Xcodebuild.
- Gestion des dépendances: CocoaPods, Carthage pour iOS; Gestion des dépendances Gradle pour Android.
- Outils de test: XCTest, EarlGrey, Appium, Espresso, UI Automator.
- Services de test cloud: Firebase Test Lab, BrowserStack.
- Systèmes de contrôle de version: Git.
Exemple de pipeline (simplifié):
# Exemple .gitlab-ci.yml pour 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 # Requiert un runner macOS/Xcode spécifique
before_script:
- gem install bundler
- cd ios
- bundle install
script:
- bundle exec fastlane build release
artifacts:
paths:
- ios/*.ipa # Ou sortie de fastlane
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 # si utilisation de CocoaPods
- 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
# Использование fastlane для упрощения или напрямую с API Google Play
- 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, настройкой уведомлений о статусе пайплайна. Особое внимание уделял безопасности подписи и управлению сертификатами/ключами. Использовал секретные переменные в системах CI/CD для хранения чувствительных данных.