Разработка мобильных приложений на NativeScript позволяет использовать JavaScript или TypeScript для создания нативных интерфейсов под iOS и Android. Однако ручные процессы сборки, тестирования и деплоя быстро становятся узким местом. Автоматизация — ключ к скорости и качеству. В российских реалиях, с учетом особенностей доступа к сервисам и требований законодательства, этот процесс имеет свою специфику. Данная инструкция проведет вас через основные этапы.
Первый шаг — настройка среды разработки. Убедитесь, что у вас установлены Node.js (рекомендуется LTS-версия), NativeScript CLI и JDK для Android. Для iOS-сборки потребуется macOS с Xcode. В условиях санкций доступ к некоторым ресурсам Apple может быть осложнен, поэтому российские разработчики часто используют macOS-серверы, размещенные у локальных облачных провайдеров, или сосредотачиваются на кроссплатформенной разработке под Android. Установите также Git для контроля версий.
Создайте новый проект: `tns create my-app --template tns-template-blank-ts`. Структура проекта будет содержать папки `app` (исходный код), `platforms` (нативные платформы) и `hooks` (для кастомных скриптов). Инициализируйте репозиторий Git: `git init` и создайте `.gitignore` файл, исключающий `node_modules`, `platforms`, `hooks` и каталоги сборки.
Сердце автоматизации — CI/CD пайплайн. В России популярны как международные решения (GitHub Actions, несмотря на ограничения), так и локальные альтернативы: GitLab CI (многие компании разворачивают свои инстансы GitLab), Jenkins или отечественный Forgejo. Рассмотрим настройку на примере GitLab CI, как часто используемого в корпоративной среде.
Создайте в корне проекта файл `.gitlab-ci.yml`. Определите этапы (stages): install, test, build_android, build_ios, deploy. Начните с этапа установки зависимостей. Чтобы ускорить процесс и не зависеть от внешних репозиториев npm, рекомендуется использовать локальный прокси- или mirror-сервер для npm-пакетов, например, Verdaccio. В скрипте укажите ваш корпоративный registry: `npm config set registry https://your-corporate-npm-registry.local`.
Этап тестирования. NativeScript-приложения можно тестировать с помощью Jasmine, Mocha или Jest. Установите Jest: `npm install --save-dev jest @nativescript/jest`. Настройте `jest.config.js`. Создайте простые unit-тесты для ваших сервисов и моделей. В `.gitlab-ci.yml` добавьте шаг запуска тестов: `npm run test`. Для UI-тестирования рассмотрите Appium или детерминированные тесты с помощью библиотеки @nativescript/testing. В российских реалиях важно иметь возможность запуска тестов без доступа к зарубежным сервисам SaaS, поэтому предпочтение отдается self-hosted решениям.
Автоматическая сборка для Android. Настройте этап `build_android`. Вам понадобится образ Docker с Android SDK. Можно использовать готовый, например, `circleci/android:api-30-node`. В скрипте установите переменные окружения для Android, например, `ANDROID_HOME`. Затем выполните команды: `npm run clean` и `npm run build android --release --key-store-path --key-store-password --key-store-alias --key-store-alias-password `. Храните чувствительные данные (пароли от keystore) не в коде, а в защищенных переменных GitLab CI (`Settings > CI/CD > Variables`). В России юридически важно соблюдать 152-ФЗ (о персональных данных), поэтому хранилище секретов должно быть развернуто внутри юрисдикции.
Сборка для iOS сложнее из-за требования к macOS. В GitLab CI для этого используют `macos` раннеры. Если у вашей организации нет своего парка Mac-серверов, можно арендовать их у российских облачных провайдеров, предлагающих macOS-инстансы (это дорого, но легально). Альтернатива — использовать сервисы вроде Bitrise или Codemagic, но их доступность и юридические аспекты работы с данными нужно тщательно проверять. Скрипт сборки: `npm run build ios --release --for-device`. Вам также потребуется загрузить сертификаты и provisioning profile в CI-окружение.
После успешной сборки артефакты (`.apk` и `.ipa` файлы) нужно сохранить. Используйте директиву `artifacts` в `.gitlab-ci.yml`, указав пути к файлам и срок их хранения. Для внутреннего распространения можно настроить автоматическую загрузку на ваш корпоративный сервер или в хранилище типа S3-совместимого (например, на базе Яндекс Облака или VK Cloud Solutions).
Рассмотрим также автоматизацию обновления зависимостей. Создайте отдельный пайплайн или задачу по расписанию (schedule), которая будет запускать `npm outdated` и автоматически создавать Merge Request с обновлениями минорных и патч-версий с помощью таких инструментов, как RenovateBot или Dependabot. Учитывайте, что их SaaS-версии могут быть недоступны, поэтому стоит рассмотреть self-hosted версию Renovate.
Линтинг и проверка кода — важная часть контроля качества. Настройте в пайплайне этап `lint` с запуском ESLint и TSLint (если используете TypeScript). Можно интегрировать SonarQube для статического анализа кода, развернув его сервер внутри компании.
В условиях импортозамещения и работы с государственными заказчиками может возникнуть требование использовать отечественные ОС. Тестирование совместимости NativeScript-приложений с Aurora OS или «Альт» может быть включено в пайплайн как отдельный этап на эмуляторах или реальных устройствах.
Не забывайте про уведомления. Настройте интеграцию CI/CD с корпоративным мессенджером (например, Telegram или VK Teams) для отправки оповещений об успешных или проваленных сборках.
Автоматизация в NativeScript — это не роскошь, а необходимость для командной разработки. Начиная с простого пайплайна для сборки APK, вы постепенно сможете добавить этапы тестирования, анализа кода и деплоя. Учитывая российские реалии, делайте ставку на self-hosted решения, локальные mirror-репозитории и тщательное управление секретами в соответствии с законодательством. Это обеспечит стабильность, скорость разработки и независимость от внешних факторов.
Автоматизация сборки и тестирования в NativeScript: пошаговая инструкция для российских разработчиков
Пошаговое руководство по настройке CI/CD для NativeScript-проектов с учетом особенностей российского IT-рынка: выбор инструментов, работа с зависимостями, сборка под iOS/Android и соблюдение требований законодательства.
317
2
Комментарии (9)