Flutter загрузка ENV файла в Bitbucket Pipeline

Вопрос или проблема

Загрузка файла 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 для передачи содержимого этих файлов в вашем скрипте.

Вот один из способов решения данной проблемы:

  1. Создайте переменные окружения в Bitbucket: Для каждой из ваших конфигураций (local, dev, qa, prod) создайте переменные окружения в настройках репозитория Bitbucket. Например:

    • ENV_DEV_CONTENT: Содержимое вашего файла .env.dev
    • ENV_QA_CONTENT: Содержимое вашего файла .env.qa
    • и так далее.
  2. Обновите ваш 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
  1. Загрузка .env файла: В вашем коде вы уже правильно определяете путь к файлу .env. Обязательно убедитесь, что метод dotenv.load вызывается после создания вашего .env файла:
final envPath = getEnvPath();

if (envPath == null) {
  throw Exception('Ошибка! .env файл не найден');
}

await dotenv.load(fileName: envPath);
  1. Тестирование: Не забудьте протестировать вашу конфигурацию, убедившись, что все переменные окружения корректны и приложение успешно собирается с правильными файлами .env.

С помощью вышеописанных шагов, вы сможете корректно загружать переменные среды из .env файлов в вашем Bitbucket Pipeline, даже если они игнорируются Git. Это позволит избежать сбоев в загрузке .env файлов во время сборки вашего Flutter приложения.

Оцените материал
Добавить комментарий

Капча загружается...