我们将配置存储在仓库中,在Github操作工作流期间,我们将其拉出,并打算在构建时将其用于应用程序。
这是我们的工作流程
- name: Get app configs from vault
env:
ENVIRONMENT: development
run: |
chmod +x scripts/ci/get-app-configs.sh
scripts/ci/get-app-configs.sh
echo "action_state=yellow" >> $GITHUB_ENV
- name: Set .env to process.env of github actions
uses: cardinalby/export-env-action@v1
with:
envFile: '.env'
expand: 'true'
- name: Generate APK
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
run: |
echo "${{ env.action_state }}"
echo ${{ env.FIREBASE }}
eas build --platform android --local --profile development --non-interactive
Get app configs from vault
步骤创建具有以下内容的.env
文件
FIREBASE={firebase_config_string}
然后在firebase.ts
中我们这样做。
const firebaseConfig = JSON.parse(process.env.FIREBASE as string) as FirebaseOptions;
该应用程序在模拟器上测试时工作正常,但在物理设备上测试实际APK时,它总是崩溃。在日志中,我一直看到这个错误E AndroidRuntime: com.facebook.react.common.JavascriptException: SyntaxError: JSON Parse error: Unexpected identifier "undefined", stack:
。
我已经将其缩小到firebase.ts
process.env
,因为当配置硬编码时应用程序不会崩溃。
我可以看到env.FIREBASE
作为Generate APK
步骤内的env变量,所以它被传递给其他步骤。并且echo
也打印出值fine。
是否不可能在构建时访问代码中的Github动作的环境变量?或者有其他方法可以实现这一点?
保持github工作流的原样
使用expo-constants
修复
将app.json
重命名为app.config.js
,以便能够添加以下行:
import 'dotenv/config';
export default {
expo: {
extra: {
ENV_VAR: process.env.ENV_VAR,
},
},
};
并通过
从应用程序访问上述变量import Constants from 'expo-constants';
const ENV_VAR = Constants.manifest?.extra?.ENV_VAR