当我在Jenkins上发布时,为什么我的测试无法看到我的系统属性?

时间:2015-03-16 23:28:01

标签: java maven jenkins maven-release-plugin

我写了一些单元测试代码,打印出名为" JENKINS_BUILD"的System.property的值。当我在本地运行这些命令时,此属性具有值:

mvn --batch-mode test -DJENKINS_BUILD=true
mvn test -DargLine="-DJENKINS_BUILD=true"
etc.

但不管我做什么,当他们在Jenkins上运行时,我都无法将这个属性放入我的测试中。这是我在那里使用的命令行选项:

mvn -DargLine="-DJENKINS_BUILD=true" --batch-mode -Dresume=false release:prepare release:perform

略有不同,但我不明白为什么会这么重要。为什么詹金斯System.getProperty("JENKINS_BUILD")为空,但"为真"在我当地的环境?这是否与使用release:prepare release:perform

有关

I think this is basically the same question,但我不确定。不同之处在于他试图将参数传递给发布插件,我试图将它们传递到surefire插件中。另外,我想在命令行中定义值而不必更改我的pom.xml。有没有办法做到这一点?

FWIW ,我链接到的解决方案正常工作。

1 个答案:

答案 0 :(得分:1)

请注意,如果不分叉JVM,则会找到您在maven命令行上设置的属性;但是,如果您对JVM进行分叉,则需要将属性复制到分叉的JVM的argment列表中。

我猜你正在分析你的构建的某些方面,但是没有传入一个新的argline,或者传入一个新的argline,它不会从已启动的(set)属性中复制必要的值。

这可能意味着您可能需要设置一个默认(空)属性,以便在设置参数和未设置参数的两种情况下使argline配置正确。这就是你链接中的第二个“例子”(Sander Verhagen的例子)正在详细说明,即使它没有明确说明原因。

至于为什么在maven-release-plugin中经常遇到这种情况,请记住,在maven-release-plugin中你有一个“父”maven进程驱动两个完整的嵌套maven构建。未能将参数传递给子构建将意味着子节点运行时没有必需的参数(因为它们只是父活动的参数,而不是构建发行版本和下一个快照版本的两个maven运行。