Вопрос или проблема
Загрузка файла 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;
}
}
У меня есть метод, который возвращает путь к файлу env, получая переменную времени сборки –dart-define=ENV_KEY=something и загружает env в соответствии с путем. Пример:
final envPath = getEnvPath();
if (envPath == null) {
throw Exception('Ошибка! Env не найден');
}
await dotenv.load(fileName: envPath);
Но проблема в битбакет-пайплайне, поскольку файлы env игнорируются git, таких env не будет в пути, и я полагаю, что это ломает код, когда я пытаюсь загрузить await dotenv.load(fileName: envPath);
. Как я могу это исправить? Я также пробовал добавлять переменные репозитория. Все еще не работает. Кстати, я использую пакет flutter_dotenv
для загрузки файла env.
Файлы .env можно скопировать в процессе сборки и добавить в ваш Bitbucket pipeline без необходимости отслеживать их в Git.
На протяжении всего процесса сборки включайте файлы .env в качестве артефактов пайплайна.
script:
- echo $ENV_DEV_CONTENT > local_variables/.env.dev
- flutter build apk --dart-define=ENV_KEY=dev
В этом сценарии переменные окружения Bitbucket, такие как $ENV_DEV_CONTENT
, должны использоваться для хранения содержимого каждого файла .env.
Ответ или решение
Для корректной загрузки файла .env
в вашем Bitbucket Pipeline, необходимо учесть, что .env
файлы игнорируются Git и, следовательно, не будут доступны на этапе сборки. Однако, вы можете использовать переменные окружения Bitbucket для передачи содержимого этих файлов в вашем скрипте.
Вот один из способов решения данной проблемы:
-
Создайте переменные окружения в Bitbucket: Для каждой из ваших конфигураций (local, dev, qa, prod) создайте переменные окружения в настройках репозитория Bitbucket. Например:
ENV_DEV_CONTENT
: Содержимое вашего файла.env.dev
ENV_QA_CONTENT
: Содержимое вашего файла.env.qa
- и так далее.
-
Обновите ваш
bitbucket-pipelines.yml
файл: В вашем конфигурационном файле Pipeline вы можете создать.env
файлы путем записи содержимого переменных окружения в нужный путь перед сборкой вашего приложения. Примерно это будет выглядеть так:
image: cirrusci/flutter:latest
pipelines:
default:
- step:
name: Build Flutter App
script:
- echo $ENV_DEV_CONTENT > local_variables/.env.dev
- echo $ENV_QA_CONTENT > local_variables/.env.qa
- echo $ENV_PROD_CONTENT > local_variables/.env.prod
- flutter pub get
- flutter build apk --dart-define=ENV_KEY=dev
- Загрузка .env файла: В вашем коде вы уже правильно определяете путь к файлу
.env
. Обязательно убедитесь, что методdotenv.load
вызывается после создания вашего.env
файла:
final envPath = getEnvPath();
if (envPath == null) {
throw Exception('Ошибка! .env файл не найден');
}
await dotenv.load(fileName: envPath);
- Тестирование: Не забудьте протестировать вашу конфигурацию, убедившись, что все переменные окружения корректны и приложение успешно собирается с правильными файлами
.env
.
С помощью вышеописанных шагов, вы сможете корректно загружать переменные среды из .env
файлов в вашем Bitbucket Pipeline, даже если они игнорируются Git. Это позволит избежать сбоев в загрузке .env
файлов во время сборки вашего Flutter приложения.