Как передать переменные среды в сборку оболочки Gradle, используя только командную строку? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь передать переменные env локально с помощью командной строки. При развертывании эти переменные передаются в контейнер docker, но при локальном запуске они отсутствуют и должны быть установлены локально.

Их необходимо удалить перед фиксацией, потому что они являются ключами доступа, поэтому я не хочу, чтобы они были выставлены в репо. Вот почему для запуска тестов локально (без IDE) потребуется команда, которая передает эти переменные.

Я уже пробовал это:

./gradlew clean build -Dspring.profiles.active=local -DMY_ENV_VAR1=xxxxxx -DMY_ENV_VAR2=xxxxxx

, и это, похоже, не работает. я не могу найти документы для параметров команды сборки, но я подумал, что именно так вы их и передаете. что я тут не так делаю? или это невозможно?

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Если вы хотите передать значения в JVM, которая запускает Gradle, вы можете использовать ключ '-D'. Я полагаю, вы должны передать значения в файл сборки Gradle из командной строки. Если это так, для этого есть две опции:

  1. Вы можете использовать ключ -P и указать там значение. Например:

    gradle -PmySecretKey="This key is so secret" yourTask

  2. Если вы используете linux или варианты, вы можете установить переменную среды следующим образом:

    export ORG_GRADLE_PROJECT_mySecretKey="This key is so secret"

После этого вы можете получить доступ к значению в файле сборки gradle следующим образом ( Я использую kotlin dsl )

val mySecretKey: String by project

println(mySecretKey)
0 голосов
/ 15 января 2020

На ваш вопрос, насколько я знаю, нет способа установить переменные среды вручную через Gradle. То, что вы сейчас делаете, просто передает обычные аргументы / параметры CLI в ваши тесты.

при локальном запуске они отсутствуют и должны быть установлены локально.

выполнение тестов локально (без IDE) потребуется команда, которая передает эти переменные.

Я вижу из вашего фрагмента, вы используете Spring, скорее всего Spring Boot. И поскольку вы уже указываете профиль как local, почему бы не определить эти переменные в конфигурации профиля c? Пример:

application.yml - базовая конфигурация

my-config-value: ${MY_ENV_VAR}

application-local.yml - local конфигурация профиля, которая переопределяет базовую

my-config-value: some-dummy-value-for-local-development
...