Шаг 1: Понимание архитектуры и ограничений. Прежде чем начать, DevOps должен четко понимать, что может, а что не может обновлять CodePush. Он обновляет только тот код, который находится в «пакете»: для React Native/Capacitor это, как правило, JavaScript-код, изображения, стили и другие ресурсы, упакованные в приложение. Нативный код (Java, Kotlin, Swift, Objective-C), изменения в манифестах или любые функциональные изменения, требующие новых разрешений, обновить через CodePush нельзя. Это ключевое ограничение, определяющее архитектуру приложения.
Шаг 2: Выбор и настройка сервера CodePush. У вас есть два основных пути: использовать облачный сервис Microsoft App Center (самый простой и популярный вариант) или развернуть собственный сервер с открытым исходным кодом (например, `code-push-server`). Для большинства команд предпочтительнее App Center.
Инструкция для App Center:
- Создайте учетную запись в App Center.
- Создайте новое приложение для каждой платформы (iOS, Android) и целевой среды (Staging, Production).
- В разделе «Distribute» -> «CodePush» создайте ключи развертывания (Deployment Keys). Они понадобятся для настройки клиента.
- Установите пакет: `npm install react-native-code-push`.
- Свяжите нативные зависимости (для старых версий RN).
- Импортируйте и оберните корневой компонент вашего приложения (обычно в `index.js` или `App.js`) в HOC `codePush`.
- Настройте параметры: ключ развертывания (можно хранить в конфигах для разных сборок), политику проверки обновлений (при запуске, вручную и т.д.).
- Сборка JS-бандла: Используйте команды типа `react-native bundle` для создания обновляемого пакета (`main.jsbundle` для iOS, `index.android.bundle` для Android).
- Публикация в App Center: Установите CLI CodePush (`npm install -g appcenter-cli`) и используйте команду:
Шаг 5: Стратегия развертывания и отката. CodePush поддерживает мощные механизмы управления выпуском:
- Поэтапный rollout: Вы можете выпустить обновление для 10%, затем 50%, затем 100% пользователей, наблюдая за метриками крашей.
- Обязательные обновления: Если исправление критическое, можно установить флаг `mandatory`, чтобы обновление применялось при следующем запуске.
- Откат: В интерфейсе App Center можно легко «откатить» текущее обновление к предыдущей стабильной версии. DevOps должен настроить процессы мониторинга (краши, ошибки) для быстрого реагирования и отката при необходимости.
Перспективы CodePush и его место в DevOps-практиках. Технология не стоит на месте. Ее перспективы тесно связаны с ростом популярности гибридных и кроссплатформенных фреймворков (React Native, Flutter, Capacitor). Для DevOps это означает:
- Смещение акцента с чисто нативных циклов выпуска на гибридные. Пайплайн должен уметь собирать как нативные билды для магазинов, так и JS-бандлы для CodePush.
- Более тесная интеграция с мониторингом. Инструменты вроде Sentry или App Center Analytics должны отслеживать не только версию нативного приложения, но и версию CodePush-бандла.
- Ближе к практике «continuous delivery». CodePush позволяет реализовать истинно непрерывную доставку изменений для фронтенд-логики приложения, что требует от DevOps культуры быстрых, но контролируемых развертываний.
- Расширение на новые области. Подход, аналогичный CodePush, начинает применяться и для других частей приложений, например, для обновления конфигураций или правил A/B-тестирования.
Комментарии (5)