我正试图通过严格的命令行命令在本地传递env变量。在部署时,这些变量被传递到docker容器中,但在本地运行时,它们不存在,需要在本地设置。
它们需要在提交之前删除,因为它们是访问密钥,所以我不希望它们在repo中暴露。这就是为什么在本地运行测试(没有IDE)需要一个传递这些变量的命令。
我已经试过了:
./gradlew clean build -Dspring.profiles.active=local -DMY_ENV_VAR1=xxxxxx -DMY_ENV_VAR2=xxxxxx
但它似乎不起作用。我找不到build命令选项的文档,但我认为这是你传递它们的方式。我做错了什么?还是不可能
6条答案
按热度按时间disho6za1#
环境变量不起作用的另一个原因是gradle守护程序。
运行以下命令杀死所有旧的守护进程:
那就再试一次在这上面浪费了太多时间。
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'
xcitsw883#
这篇相关文章对我来说很有用:https://stackoverflow.com/a/57890208/1441210
解决方案是使用
gradlew
的--args
选项来获取要传递给spring Boot 应用程序的环境变量: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脚本 *)
g2ieeal75#
我只是把env变量设置在调用命令之前,就像一个普通的Unix shell一样。和我的ZSH一起工作
MY_ENV_VAR1=xxxxxx MY_ENV_VAR2=xxxxxx gradlew clean test
ngynwnxp6#
回答你的问题,据我所知,没有办法通过Gradle手动设置环境变量。你现在所做的只是将常规的CLI参数传递给你的测试。
在本地运行时,它们不存在,需要在本地设置。
在本地运行测试(没有IDE)需要一个传递这些变量的命令。
我从你的代码片段中看到,你正在使用Spring,可能是Sping Boot 。既然已经将配置文件指定为
local
,为什么不在特定于配置文件的配置中定义这些变量呢?范例:application.yml
--基本配置application-local.yml
--local
配置文件配置,覆盖基本配置文件