#react-native #continuous-integration #expo #gitlab-ci #continuous-delivery
#react-native #непрерывная интеграция #expo #gitlab-ci #непрерывная доставка
Вопрос:
Я пытаюсь создать React Native APK с помощью Expo (без извлечения). Мне удается локально получать переменные среды из файла .env, когда я делаю expo build:android
это на своем локальном компьютере со всеми файлами проекта.
Когда я отправляю запрос в свой репозиторий GitLab, у меня есть этот файл .gitlab-ci.yml
---
image: node:alpine
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- ~/.npm
- .jest
stages:
- test
- deploy
before_script:
- npm ci
jest-tests:
stage: test
script:
- npx jest --ci --passWithNoTests
expo-deployments:
stage: deploy
script:
- apk add --no-cache bash
- npx expo login -u $EXPO_USERNAME -p $EXPO_PASSWORD
- npx expo build:android --EXPO_ANDROID_GOOGLE_API_KEY $EXPO_ANDROID_GOOGLE_API_KEY --EXPO_IOS_GOOGLE_API_KEY $EXPO_IOS_GOOGLE_API_KEY --release-channel staging --non-interactive
- EXPO_ANDROID_GOOGLE_API_KEY=$EXPO_ANDROID_GOOGLE_API_KEY; EXPO_IOS_GOOGLE_API_KEY=$EXPO_IOS_GOOGLE_API_KEY; expo build:android --release-channel staging --non-interactive
У меня нет в репозитории файла .env из-за безопасности.
Где все эти переменные хранятся в каждой среде в GitLab: (работает отлично)
- EXPO_USERNAME = имя пользователя моей учетной записи разработчика для доступа к Expo.
- EXPO_PASSWORD = пароль учетной записи для доступа к Expo.
(не работает вообще при попытке сборки)
- EXPO_IOS_GOOGLE_API_KEY = «abcdefghijklmnopqrstuvwxyz»
- EXPO_ANDROID_GOOGLE_API_KEY = «abcdefghijklmnopqrstuvwxz»
Интересно, как я мог бы установить переменные среды Google Maps в приложение при запуске команды expo build: android через конвейер GitLab CI:
- npx expo build:android
Ответ №1:
Наконец, мне удалось заставить это работать следующим образом:
---
image: node:alpine
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- ~/.npm
- .jest
stages:
- test
- deploy
before_script:
- npm ci
- ANDROID_GOOGLE_MAPS_API_KEY=${CI_COMMIT_BRANCH}_EXPO_ANDROID_GOOGLE_API_KEY
- IOS_GOOGLE_MAPS_API_KEY=${CI_COMMIT_BRANCH}_EXPO_IOS_GOOGLE_API_KEY
- export android=$( eval echo $$ANDROID_GOOGLE_MAPS_API_KEY )
- export ios=$( eval echo $$IOS_GOOGLE_MAPS_API_KEY )
jest-tests:
stage: test
script:
- npx jest --ci --passWithNoTests
expo-deployments:
stage: deploy
script:
- echo "EXPO_ANDROID_GOOGLE_API_KEY=$android" >> .env
- echo "EXPO_IOS_GOOGLE_API_KEY=$ios" >> .env
- apk add --no-cache bash
- npx expo login -u $EXPO_USERNAME -p $EXPO_PASSWORD
- npx expo build:android --release-channel staging --non-interactive
Где…
...CI_COMMIT_BRANCH is development|staging|production depending which branch in gitlab I am using.
...development_EXPO_ANDROID_GOOGLE_API_KEY | staging_EXPO_ANDROID_GOOGLE_API_KEY | production_EXPO_ANDROID_GOOGLE_API_KEY are variables that are stored at the Gitlab project.
... I am generating the .env file every time I run the script and saving there my variables with the respective value with: echo "EXPO_ANDROID_GOOGLE_API_KEY=$android" >> .env.
Таким образом, мне не нужно загружать мой env-файл в Gitlab. Мне нужно только определить свои переменные в настройках проекта в Gitlab.
Надеюсь, это кому-то поможет!