如何设置一个环境变量从一个格拉德尔建设?

我正在尝试设置一个环境变量,我正在使用 Macosx (埃尔卡皮坦)。 命令是“等级测试”。

我在自己的楼里试试这个:

task setenv(type: Exec) {
commandLine "export", "SOME_TEST_VAR=aaa"
}
test.dependsOn setenv

构建失败:

任务“ : myproject: setenv”执行失败。

启动进程的命令‘导出’时出现问题

我还试过这个:

test.doFirst {
ProcessBuilder pb1 = new ProcessBuilder("export SOME_TEST_VAR=some test value")
pb1.start();
}

构建成功了,但是,如果我在我的 JUnit 测试中检查环境变量,它就失败了:

assertTrue(System.getenv().containsKey("SOME_TEST_VAR"));

有没有什么方法可以设置 Gradle build 的环境变量(在 build.Gradle 文件中) ?

更新:

我已经对它进行了隔离测试: 值确实被传递了,我的测试任务接收了所有内容,可以是 systemProperty、环境变量或 jvmArgs。

所以,这里的格拉德尔本身并没有什么问题。

当我在真正的项目中尝试时,问题就出现了。它用 Spring 做依赖注入。我可能错了,但看起来 Spring 框架在某个地方清除了这些值。

该子项目目前正在冻结,我不能检查我的猜测现在细节。

163825 次浏览

对于测试任务,您可以像下面这样使用 环境财产:

test {
environment "VAR", "val"
}

也可以在 exec 任务中使用 环境财产

task dropDatabase(type: Exec) {
environment "VAR", "val"
commandLine "doit"
}

请注意,使用此方法,环境变量仅在任务期间设置。

你亦可使用「环境」命令「预设」环境变量设定:

run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' }

这个是为我的测试插件的设置环境变量工作的

test {
systemProperties = [
'catalina.home': 'c:/test'
]
println "Starting Tests"
beforeTest { descriptor ->
logger.lifecycle("Running test: " + descriptor)
}
}

在我的项目中,我有一个关于子模块集成测试的 Gradle 任务:

task intTest(type: Test) {
...
system.properties System.properties
...

这是将所有系统参数注入测试环境的关键。 因此,现在您可以像这样运行 gradle 来传递具有 ABC 值的 param,并在代码中使用 ${ param }的值

gradle :some-service:intTest -Dparam=ABC

如果在 Gradle 之外定义了全局环境变量,

test {
environment "ENV_VAR",  System.getenv('ENV_VAR')
useJUnitPlatform()
}

请尝试这个选项:

 task RunTest(type: Test) {
systemProperty "spring.profiles.active", System.getProperty("DEV")
include 'com/db/project/Test1.class'
}

这看上去像是一条老线索,但我们如何在 Gradle 任务中设定环境变量,还有一个变体。

task runSomeRandomTask(type: NpmTask, dependsOn: [npmInstall]) {
environment = [ 'NODE_ENV': 'development', BASE_URL: '3000' ]
args = ['run']
}

上述 Gradle 任务集成了 Gradle 和 npm 任务。

这样我们可以传递多个环境变量。希望这有助于拓宽以上答案已经提供的理解。干杯!

如果你使用的是 Gradle Kotlin 语法,你也可以这样做:

tasks.taskName {
environment(mapOf("A" to 1, "B" to "C"))
}

因此,对于 test任务,这将是:

tasks.test {
environment(mapOf("SOME_TEST_VAR" to "aaa"))
}

如果您正在使用 IDE,那么可以运行、编辑配置、分级、, 选择分级任务并更新环境变量。

enter image description here

或者,如果使用终端执行 gradle 命令, 只要输入‘ export KEY = VALUE’,您的工作就完成了。

需要环境变量来自定义分级任务的执行。 下面是7.3.2级的工作代码,其中需要传递主机和端口到黄瓜台阶。

    task runFunctionalTests() {
dependsOn assemble, testClasses
doLast {
javaexec {
mainClass = "io.cucumber.core.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = [
'--glue', 'com.examples.functional.steps',
'src/test/java/com/examples/tests/functional/features'
]
environment 'PROTOCOL', 'http'
environment "HOST", "myserver"
environment 'PORT', '8080'
}
}
}

然后按照下面的步骤访问黄瓜步骤中的环境变量

String host = System.getenv("HOST");
int port = Integer.parseInt(System.getenv("PORT"));
String host = System.getenv("PROTOCOL");