Содержание
Непрерывная интеграция (CI) и непрерывная доставка (CD) - это набор автоматизированных процессов, которые помогают командам разработчиков доставлять программное обеспечение быстрее и надежнее. CI-процессы автоматизируют процесс создания, тестирования и развертывания кода, в то время как CD-процессы автоматизируют процесс доставки этого кода конечному пользователю.
В этой статье мы рассмотрим самые популярные CI/CD-процессы, используемые разработчиками React Native. Вот о чем мы поговорим сегодня:
Какие проблемы решает CI/CD-конвейер?
Как разработчики, мы знаем, что одним из наиболее важных шагов при программировании является сборка, развертывание и тестирование нашего кода. Для этого мы можем выполнить следующие действия:
- Создать отдельную ветку в нашем репозитории с именем “production”.
- Когда кто-то из команды делает коммит в эту ветку, этот член команды должен выполнить сценарий сборки для создания исполняемого файла.
- Наконец, разработчику приходится скачать этот файл на свой компьютер и затем загрузить его на платформу распространения. Через эту платформу клиенты могут скачать и запустить приложение.
Несмотря на то, что этот способ работает, у него есть несколько проблем:
- Этот процесс утомителен. На первом этапе разработчики должны сначала внести изменения в ветку, а затем запустить сценарий сборки.
- Это занимает много времени, потому что процесс сборки включает в себя компиляцию проекта, тестирование и создание исполняемого файла.
- Кроме того, это потребляет ценные ресурсы на локальной машине, что может привести к серьезным проблемам в случаях, когда кодовая база проекта большая и сложная.
И вот здесь на помощь приходит CI/CD-конвейер. Давайте рассмотрим несколько различных вариантов для разработки в React Native.
Expo App Services
Инструмент Expo Application Services (EAS) нацелен на проекты React Native и Expo с самого начала. В результате это означает, что процесс развертывания и сборки легок, это самый простой инструмент в этом списке для работы, потому что для начала работы требуется всего несколько команд:

Например, для создания и публикации нам достаточно сделать следующее:
npm install --global eas-cli
npx eas-login # sign into the service
eas build:configure # this will generate an eas.json file
# this file will allow you to configure your building process.
Плюсы и минусы EAS
Вот несколько вещей, которые мне нравятся в EAS:
- Это самый простой вариант для размещения и развертывания приложений, особенно если они созданы с использованием Expo.
- Разработчики предоставляют опцию размещения процесса сборки Expo на вашем сервере, но, следовательно, она подходит для компаний, где код проекта должен быть сохранен в частном порядке.
- Он берет на себя напряженные моменты, такие как подпись сертификатов и файлы хранилища ключей, что экономит много времени и усилий инженера.
- Предоставляет обширную документацию, если вам понадобится помощь.
- Поддерживает как Expo, так и приложения React Native.
Вот некоторые из минусов:
- Бесплатный тариф ограничен, если сборки происходят часто.
- В пиковые часы вам, возможно, придется подождать некоторое время, пока сборки завершатся на бесплатном тарифе, что может стать проблемой, если у вас сжатый срок.
- На момент написания этой статьи, запуск E2E-тестов находится в начальном состоянии, хотя поддержка продолжает развиваться.
Microsoft App Center
Microsoft App Center (MAC) - это платформа CI/CD, посвященная разработке приложений. В отличие от Expo Application Services, она поддерживает как React Native, так и другие кроссплатформенные технологии, такие как Unity и Xamarin.
Вот как это выглядит:

Создание приложения в App Center требует определенных усилий, но все равно не вызывает сложностей. Сначала загрузите свой проект на GitHub, Azure или другую платформу для размещения кода:

Затем в настройках App Center укажите местоположение проекта:

Наконец, сервис попросит вас настроить параметры сборки. В этом этапе вам также может потребоваться создать и загрузить файл хранилища ключей.
Вот и все! Когда это будет сделано, процесс сборки приложения начнется.
Плюсы и минусы MAC
Microsoft App Center обладает некоторыми значительными преимуществами, которые выделяют его среди конкурентов.
Он может выполнять тест для проверки того, может ли приложение успешно запуститься. Это особенно полезно в ситуациях, когда вам необходимо убедиться в функциональности новой сборки.
Благодаря этой функции вы можете проверить это без ручного запуска приложения на мобильном устройстве:

Вот еще несколько преимуществ, которые стоит упомянуть:
- Бесплатный уровень щедрый. Во многих случаях он достаточен для личных и маломасштабных проектов, но сервис также предоставляет бесплатную пробную версию на 30 дней для платного уровня.
- Предоставляет четкую и исчерпывающую документацию.
- Поддерживает тесты end-to-end.
- Широко используется в корпоративных средах, поэтому доступна обширная поддержка от сообщества.
Однако есть несколько моментов, которые мне не понравились:
- Нет возможности выполнять сборки на локальной инфраструктуре. Как уже обсуждалось ранее, это может быть проблемой в ситуациях, где важна конфиденциальность исходного кода.
- Платный вариант может быть слишком дорогим для малых стартапов.
- Тесты end-to-end доступны только при платном использовании.
- На момент написания этой статьи Microsoft не поддерживает приложения Expo.
GitHub Actions
GitHub Actions - это выдающийся вариант среди множества открытых программистов. Одной из причин его популярности является то, что это инструмент интегрируется с GitHub, поэтому разработчики могут использовать его для автоматизации своих рабочих процессов непосредственно из своего репозитория на GitHub:

Хотя создание приложения с использованием GitHub Actions может быть непростым, оно предоставляет больший контроль над процессом сборки по сравнению с другими платформами, что делает его полезным компромиссом.
Для развертывания с помощью GitHub Actions создайте папку в своем репозитории с именем .github/workflows. Затем создайте новый файл с именем ci.yml:

Это сообщает GitHub, что наш проект будет использовать GitHub Actions для развертывания. После этого следуйте инструкциям в этой статье LogRocket , чтобы создать конвейер CI/CD с использованием GitHub Actions в React Native.
Преимущества и недостатки GitHub Actions
Вот несколько причин, почему эта служба конвейера может вам подойти:
- Служба позволяет больше контролировать процесс, что означает, что вы можете добавлять тесты и даже изменять агента сборки.
- Ее бесплатный уровень более чем достаточен для личных проектов. Кроме того, GitHub предоставляет студентам бесплатные профессиональные аккаунты, которые позволяют им бесплатно перейти к платному варианту.
- Помимо создания приложений, GitHub Actions также может выполнять автоматическую проверку качества кода. Это подходит в ситуациях, когда вы хотите выявить запахи кода и ошибки в вашем проекте перед развертыванием.
- Функция самостоятельных раннеров позволяет компаниям размещать свою версию Actions на локальной инфраструктуре. Как было упомянуто ранее, это отлично подходит для частных репозиториев кода.
- Бесплатный уровень позволяет проводить тесты “end-to-end”.
Однако по сравнению с другими платформами есть несколько вещей, которые мне не понравились:
- Процесс создания конвейера CI/CD слишком сложен. В некоторых случаях он может быть слишком сложным для начинающих, которые хотят развернуть свое приложение.
- GitHub Actions не имеет специальной документации для приложений React Native. Из-за этого вам, возможно, придется полагаться на помощь сообщества.
CodeMagic
CodeMagic - это еще один конвейер CI/CD, специально ориентированный на мобильные фреймворки разработки приложений, включая Flutter, Cordova, Ionic и другие:

Как и в Expo и Microsoft App Center, развертывание и сборка приложения React Native довольно просты. Для начала создайте в приложении React Native файл codemagic.yml и напишите следующий код:
workflows:
sample-workflow:
name: Codemagic Sample Workflow
max_build_duration: 120
instance_type: mac_mini_m1
Это сообщает конвейеру, что нашу сборку будет выполнять машина Apple M1 для развертывания.
После этого этапа лучше перейти к документации CodeMagic, чтобы узнать, как создать сборку и развернуть ваш проект.
Преимущества и недостатки CodeMagic
Вот некоторые из вещей, которые мне понравились:
- Их серверы используют машины серии M от Apple, что обеспечивает быстрые времена сборки
- CodeMagic использует модель оплаты по мере использования, что означает, что вы платите только за используемые ресурсы. В некоторых случаях это может быть более дешевым вариантом по сравнению с другими службами в этом списке
- Удивительная документация с пошаговыми инструкциями Поддерживает тесты “end-to-end” на бесплатном уровне
Однако есть несколько вещей, которые мне не понравились:
- Отсутствует опция самостоятельного размещения, что может вызвать проблемы для чувствительных к конфиденциальности кодов
Почетные упоминания
Профессиональные мобильные разработчики также широко используют другие службы CI, такие как Bitrise и Jenkins CI. Поскольку эти службы имеют шаги компиляции, аналогичные Microsoft App Center, мы не будем здесь рассматривать их процессы создания сборки.
Bitrise
Как и CodeMagic, эта служба ориентирована на разработку мобильных приложений. Кроме того, она поддерживает дополнения, которые помогают в разработке, например, отчеты об отладке или управление выпусками.

Преимущества и недостатки Bitrise
Вот некоторые аспекты Bitrise, которые могут сделать его привлекательным вариантом:
- Быстрые времена сборки: так же как CodeMagic, он также поддерживает машины серии M от Apple для компиляции и сборки кода
- Модель оплаты по мере использования: самое большое преимущество этой службы заключается в том, что вы можете экономить деньги, платя только за использованные ресурсы
- Поддерживает тесты “end-to-end” на бесплатном уровне
Однако были выявлены некоторые недостатки, которые могут быть решающими для некоторых:
- Не предоставляет опцию самостоятельного размещения
Jenkins
Jenkins - это еще одна служба конвейера, ориентированная на предприятия и крупные компании. Это связано с тем, что програмное обеспечение полностью самостоятельное. Как уже обсуждалось ранее, это отлично подходит для ситуаций, когда исходный код проекта должен оставаться конфиденциальным.

Преимущества и недостатки Jenkins
Одним из основных факторов, который мне понравился в Jenkins, было то, что он полностью самостоятельный. Из-за этого Jenkins популярен среди крупных предприятий. Это связано с тем, что самостоятельное размещение позволяет компаниям избежать затрат на дорогие тарифы и вместо этого использовать локальное оборудование.
Однако это связано с определенными затратами: поддержание и обеспечение безопасности вашего сервера Jenkins может вызвать некоторые хлопоты для некоторых команд.
Таблица сравнения
Вот небольшая таблица, которая подводит итоги всех преимуществ и недостатков всех платформ, обсуждаемых в этой статье:
| Инструмент | Основные характеристики | Преимущества | Недостатки | Ценообразование |
|---|---|---|---|---|
| Expo Application Services | Создан для проектов React Native и Expo |
|
|
Бесплатная версия и платные версии |
| Microsoft App Center | Поддерживает несколько платформ, включая React Native |
|
|
Бесплатная версия и платные версии |
| GitHub Actions | Интеграция напрямую с репозиторием GitHub |
|
|
Бесплатная версия и платные версии |
| CodeMagic | Специально ориентирован на мобильные фреймворки |
|
Отсутствие самостоятельной хостинг-опции | Плата по мере использования |
| Bitrise | Создан для мобильных приложений, использует машины серии M от Apple |
|
Отсутствие самостоятельной хостинг-опции | Плата по мере использования |
| Jenkins CI | Полностью самостоятельное размещение, отсутствует возможность онлайн-хостинга |
|
Поддержание и обеспечение безопасности сервера Jenkins на локальной инфраструктуре может вызвать некоторые хлопоты | Бесплатно |
Заключение
В данной статье мы кратко рассмотрели некоторые популярные платформы CI/CD для React Native и почему они являются важными в мире программирования. В нашей таблице сравнения мы также упомянули честные упоминания, такие как Jenkins CI и Bitrise. Важно помнить, что каждый проект уникален, и поэтому важно оценивать преимущества и недостатки каждого инструмента.
В моих проектах я обычно использую Expo Services, потому что он невероятно легко настраивается и используется, и его бесплатная версия более чем достаточна для моих потребностей. Большое спасибо за прочтение!