React native 使用GitLab构建世博会时的环境变量

React native 使用GitLab构建世博会时的环境变量,react-native,continuous-integration,expo,gitlab-ci,continuous-delivery,React Native,Continuous Integration,Expo,Gitlab Ci,Continuous Delivery,我正在尝试用Expo构建一个React原生APK(不弹出)。当我在本地机器上使用所有项目文件进行expo build:android时,我可以设法从.env文件本地获取环境变量 当我推送到GitLab存储库时,我有一个.GitLab-ci.yml文件 --- image: node:alpine cache: key: ${CI_COMMIT_REF_SLUG} paths: - ~/.npm - .jest stages: - test - deploy bef

我正在尝试用Expo构建一个React原生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的项目设置中定义变量

    希望这对别人有帮助