如何仅使用命令行将环境变量传递到Gradle Package 器构建?

a0x5cqrl  于 2023-10-19  发布在  其他
关注(0)|答案(6)|浏览(137)

我正试图通过严格的命令行命令在本地传递env变量。在部署时,这些变量被传递到docker容器中,但在本地运行时,它们不存在,需要在本地设置。
它们需要在提交之前删除,因为它们是访问密钥,所以我不希望它们在repo中暴露。这就是为什么在本地运行测试(没有IDE)需要一个传递这些变量的命令。
我已经试过了:

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

但它似乎不起作用。我找不到build命令选项的文档,但我认为这是你传递它们的方式。我做错了什么?还是不可能

disho6za

disho6za1#

环境变量不起作用的另一个原因是gradle守护程序。
运行以下命令杀死所有旧的守护进程:

./gradlew --stop

那就再试一次在这上面浪费了太多时间。

js5cn81o

js5cn81o2#

用于传递env变量
MY_ENV_VAR1=xxxxxx MY_ENV_VAR2=xxxxxx ./gradlew bootRun
对于参数/覆盖属性值
./gradlew bootRun --args='--spring.profiles.active=local --db.url=something --anotherprop=fafdf'
用于传递环境变量和重写属性值。
MY_ENV_VAR1=xxxxxx MY_ENV_VAR2=xxxxxx ./gradlew bootRun --args='--spring.profiles.active=local --db.url=something --anotherprop=fafdf'

xcitsw88

xcitsw883#

这篇相关文章对我来说很有用:https://stackoverflow.com/a/57890208/1441210
解决方案是使用gradlew--args选项来获取要传递给spring Boot 应用程序的环境变量:

./gradlew bootRun --args='--spring.profiles.active=local'
b0zn9rqh

b0zn9rqh4#

如果你想将值传递给运行gradle的JVM,你可以使用“-D”开关。我想你必须从命令行向gradle构建文件传递值。如果是这样的话,有两种选择:
1.您可以使用-P开关并在那里指定值。举例来说:
gradle -PmySecretKey="This key is so secret" yourTask
1.如果你使用的是Linux或其变体,你可以设置环境变量如下:
export ORG_GRADLE_PROJECT_mySecretKey="This key is so secret"
在此之后,您可以访问gradle构建文件中的值,如下所示(* 我使用Kotlin脚本 *)

val mySecretKey: String by project

println(mySecretKey)
g2ieeal7

g2ieeal75#

我只是把env变量设置在调用命令之前,就像一个普通的Unix shell一样。和我的ZSH一起工作
MY_ENV_VAR1=xxxxxx MY_ENV_VAR2=xxxxxx gradlew clean test

ngynwnxp

ngynwnxp6#

回答你的问题,据我所知,没有办法通过Gradle手动设置环境变量。你现在所做的只是将常规的CLI参数传递给你的测试。
在本地运行时,它们不存在,需要在本地设置。
在本地运行测试(没有IDE)需要一个传递这些变量的命令。
我从你的代码片段中看到,你正在使用Spring,可能是Sping Boot 。既然已经将配置文件指定为local,为什么不在特定于配置文件的配置中定义这些变量呢?范例:
application.yml--基本配置

my-config-value: ${MY_ENV_VAR}

application-local.yml--local配置文件配置,覆盖基本配置文件

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

相关问题