Как организовать процесс CI/CD для React Native-приложения?
Организация процесса CI/CD (Continuous Integration / Continuous Deployment) для React Native-приложения — это комплекс мер и инструментов, направленных на автоматизацию сборки, тестирования и доставки приложения в стора (App Store и Google Play) или внутренние каналы распространения (например, для QA или клиентов).
Хорошо организованный CI/CD-процесс экономит время, уменьшает число ошибок при ручной сборке, повышает надёжность и обеспечивает быструю доставку изменений.
1. Выбор CI/CD платформы
Существуют облачные и локальные решения, поддерживающие React Native:
- **GitHub Actions
** - **Bitrise
** - **CircleCI
** - **GitLab CI/CD
** - **Azure Pipelines
** - **Fastlane (как инструмент доставки)
** -
EAS Build от Expo (если проект на Expo)
-
**Codemagic
** - Jenkins (самостоятельная настройка)
Для React Native чаще всего выбирают GitHub Actions + Fastlane или Bitrise + Fastlane, либо EAS для Expo.
2. Подготовка проекта к CI
Обязательные шаги:
-
Настроить package.json скрипты (build:android, build:ios, test, lint)
-
Разделить .env на env.staging, env.production, т.д.
-
Настроить babel.config.js и metro.config.js на поддержку CI
-
Убедиться, что проект собирается локально без GUI
Разделить сборку по платформам:
-
android/app/build.gradle должен поддерживать переменные из gradle.properties
-
ios/ должен содержать рабочий .xcworkspace и schema
3. Секреты и конфигурации
-
API-ключи, signing configs, .env-файлы не должны быть в репозитории
-
Использовать GitHub Secrets, Bitrise Secrets, dotenv в CI
-
Хранить ключи шифрованными (.keystore, google-services.json, GoogleService-Info.plist, apple certificates)
4. Автоматизация с помощью Fastlane
Fastlane — CLI-инструмент для автоматизации сборок, подписи и загрузки приложений.
Установка:
bundle init
bundle add fastlane
fastlane init
Основные lanes:
\# Fastfile
platform :ios do
desc "Build and upload to TestFlight"
lane :beta do
increment_build_number
build_app(scheme: "YourApp")
upload_to_testflight
end
end
platform :android do
desc "Build and upload to Google Play internal track"
lane :beta do
gradle(
task: "assemble",
build_type: "Release"
)
upload_to_play_store(track: "internal")
end
end
5. Пример CI-конвейера на GitHub Actions
.github/workflows/ci.yml
name: React Native CI
on:
push:
branches: \[main, develop\]
jobs:
build-android:
runs-on: ubuntu-latest
steps:
\- uses: actions/checkout@v3
\- uses: actions/setup-node@v3
with:
node-version: 18
\- run: yarn install
\- run: yarn lint
\- run: yarn test
\- run: cd android && ./gradlew assembleRelease
build-ios:
runs-on: macos-latest
steps:
\- uses: actions/checkout@v3
\- run: yarn install
\- run: yarn lint
\- run: yarn test
\- run: cd ios && xcodebuild -workspace App.xcworkspace -scheme App -sdk iphoneos -configuration Release archive
6. Подпись приложений
Android:
-
Использовать keystore, настроенный в gradle.properties
-
Передавать файл через секреты CI/CD
-
Подписывать .apk или .aab автоматически
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=\*\*\*\*\*
MYAPP_RELEASE_KEY_PASSWORD=\*\*\*\*\*
iOS:
-
Использовать match от Fastlane или manual signing
-
Хранить .p12 сертификаты и provisioning profile в Encrypted Cloud (или Git repo)
-
Apple Developer account нужен для автоматизации
7. Разделение по окружениям
-
Конфиги: .env.staging, .env.production
-
Бандлинг: yarn build:staging, yarn build:prod
-
Android flavors: dev, prod в build.gradle
-
iOS схемы: App Dev, App Prod
8. Доставка на устройства
Test Distribution:
-
Android Internal Testing (Google Play)
-
TestFlight (Apple)
-
**Firebase App Distribution
** - **Diawi / App Center / Installr / Expo Go (если Expo)
**
\# Fastlane
upload_to_testflight
upload_to_play_store(track: "internal")
9. CodePush (для JS-обновлений без стора)
Microsoft App Center поддерживает CodePush:
-
Подключается через react-native-code-push
-
Позволяет обновлять JavaScript-часть (без сборки .apk/.ipa)
-
Можно встроить в Fastlane
appcenter codepush release-react -a user/app -d Production
10. Мониторинг и логирование
-
Sentry — отслеживание ошибок
-
Firebase Crashlytics — для нативных крашей
-
Datadog, Bugsnag — альтернатива
-
CI может отправлять уведомления в Slack / Telegram о сборке
11. Советы по управлению CI/CD в командах
-
Создавать .ci директорию со всеми скриптами
-
Хранить .env файлы вне репозитория, использовать vault или secrets manager
-
Установить правила ветвления: develop → staging, main → production
-
Проводить ревью Fastfile и CI конфигураций
-
Использовать lint-staged, husky, commitlint на client-side
12. Альтернативные решения
EAS Build (Expo)
eas build --platform ios --profile production
eas submit -p ios
Bitrise (визуальный CI)
-
Простая настройка через UI
-
Поддержка React Native, Fastlane, Expo
-
Широкие интеграции: Slack, Firebase, App Store
Codemagic
-
Специализированный CI/CD для Flutter и React Native
-
Отлично подходит для auto-release в App Store / Play Store
Организованный CI/CD-процесс для React Native экономит ресурсы команды, устраняет человеческий фактор и ускоряет релизы. Комбинация Fastlane + GitHub Actions/Bitrise является наиболее гибкой и широко применяемой в индустрии.