使用 GitLab 构建时 Expo 中的环境变量
environment variables in Expo when building with GitLab
我正在尝试使用 Expo(不弹出)构建 React Native APK。当我在本地计算机上使用所有项目文件执行 expo build:android
时,我可以设法从 .env 文件本地获取我的环境变量。
当我推送到我的 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
出于安全考虑,我的 repo 中没有 .env 文件。
所有这些变量都存储在 GitLab 的每个环境中:
(完美运行)
- EXPO_USERNAME = 我的开发账号访问 Expo 的用户名。
- EXPO_PASSWORD = 访问Expo的账号密码
(尝试构建时根本不工作)
- EXPO_IOS_GOOGLE_API_KEY = "abcdefghijklmnopqrstuvwxyz"
- EXPO_ANDROID_GOOGLE_API_KEY = "abcdefghijklmnopqrstuvwxz"
我想知道如何在通过 GitLab CI 管道 运行 expo build:android 命令时将 Google Maps 环境变量设置到应用程序中:
- npx expo build:android
最后我可以通过以下方式完成这项工作:
---
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 的项目的设置中定义我的变量即可。
希望这对某人有所帮助!
我正在尝试使用 Expo(不弹出)构建 React Native APK。当我在本地计算机上使用所有项目文件执行 expo build:android
时,我可以设法从 .env 文件本地获取我的环境变量。
当我推送到我的 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
出于安全考虑,我的 repo 中没有 .env 文件。
所有这些变量都存储在 GitLab 的每个环境中: (完美运行)
- EXPO_USERNAME = 我的开发账号访问 Expo 的用户名。
- EXPO_PASSWORD = 访问Expo的账号密码
(尝试构建时根本不工作)
- EXPO_IOS_GOOGLE_API_KEY = "abcdefghijklmnopqrstuvwxyz"
- EXPO_ANDROID_GOOGLE_API_KEY = "abcdefghijklmnopqrstuvwxz"
我想知道如何在通过 GitLab CI 管道 运行 expo build:android 命令时将 Google Maps 环境变量设置到应用程序中:
- npx expo build:android
最后我可以通过以下方式完成这项工作:
---
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 的项目的设置中定义我的变量即可。
希望这对某人有所帮助!