在 bitbucket-pipelines 中加载 ENV 文件不起作用。
const localEnvPath = 'local_variables/.env.local';
const devEnvPath = 'local_variables/.env.dev';
const qaEnvPath = 'local_variables/.env.qa';
const prodEnvPath = 'local_variables/.env.prod';
String? getEnvPath() {
const envKey = String.fromEnvironment('ENV_KEY');
switch (envKey) {
case 'local':
return localEnvPath;
case 'dev':
return devEnvPath;
case 'qa':
return qaEnvPath;
case 'prod':
return prodEnvPath;
default:
return null;
}
}
我这里有一个方法,通过获取构建时间变量 --dart-define=ENV_KEY=something 返回 env 文件的路径,并根据路径加载 env。像这样
final envPath = getEnvPath();
if (envPath == null) {
throw Exception('Error! Env not found');
}
await dotenv.load(fileName: envPath);
但问题出在 bitbucket 管道中,由于 env 文件被 git 忽略,路径中不会有这样的 env,我相信它在尝试加载等待时会中断
dotenv.load(fileName: envPath);
。我该如何解决这个问题?我还尝试添加存储库变量。还是不行啊顺便说一句,我正在使用 flutter_dotenv
package 来加载环境文件。
可以在构建过程中复制 .env 文件并将其添加到 Bitbucket 管道中,而无需在 Git 中进行跟踪。
在整个构建过程中,将 include.env 文件作为管道工件。
script:
- echo $ENV_DEV_CONTENT > local_variables/.env.dev
- flutter build apk --dart-define=ENV_KEY=dev
在这种情况下,应该使用像
$ENV_DEV_CONTENT
这样的Bitbucket环境变量来保存每个.env文件的内容。