我为Jenkins作业定义了SELENIUM_SERVER
字符串参数。
这项工作还有预建步骤:
调用
的顶级Maven目标 install -Dproject.build.sourceEncoding=Cp1252
和构建步骤,它还调用具有以下目标的Maven
test -DseleniumServer=${SELENIUM_SERVER}
但是当我运行该作业时,看起来该参数仅用于运行预构建步骤的阶段,并在构建步骤阶段被忽略。
日志说明如下:
[Automation] $ /home/build/tools/hudson.tasks.Maven_MavenInstallation/Maven_3/bin/mvn -DSELENIUM_SERVER=<server1> install
...以及test
上下文中未提及的参数。
这导致例外:
org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
如果我删除了预构建步骤,则该参数将正确应用于构建步骤。
如何将参数应用于构建步骤,而不仅仅是预构建步骤?
提前致谢!
答案 0 :(得分:1)
根据您的问题,我认为install
和test
配置为两个不同的构建步骤。如果你看一下Maven lifecycle install
,就会看到test
来自"if you call a build phase, it will execute not only that build phase, but also every build phase prior to the called build phase"
和install
。
因此,通过运行您的第一个目标test
,将运行整个默认生命周期,包括测试。由于您没有指定参数,因为它失败并且由于失败,因此第二个目标{{1}}甚至没有执行。在您的第一个目标期间抛出错误,而不是您的第二个目标。
答案 1 :(得分:0)
如果没有看到你确切的Jenkins配置,可能很难找到准确的答案,但我想我知道答案是什么。
詹金斯通常不知道构建步骤实际上做了什么。它只是调用它们。
您应该能够在发出步骤时在日志中明确看到。我注意到你提出了预建步骤中的日志消息,而不是来自构建步骤
[Automation] $ /home/build/tools/hudson.tasks.Maven_MavenInstallation/Maven_3/bin/mvn
-DSELENIUM_SERVER=<server1> install
然而,由于某种原因,似乎在这里应用了这个论点。这通常意味着它使用该选项运行整个maven构建(包括测试),你应该可以成功完成第一个maven工作。
但是你说第二步失败了吗?
在jenkins中设置maven目标时,指定一些选项(请参阅高级版)
确保在预构建步骤中,您将安装作为目标,并使用
的属性部分project.build.sourceEncoding=Cp1252
单独一行。这些将被转换为-D
指令。
日志仍应显示
行mvn -Dproject.build.sourceEncoding=Cp1252 install
而且不多了。
在构建步骤中,确保目标是测试,并且属性部分仅包含
seleniumServer=${SELENIUM_SERVER}
这应该转化为
mvn -DseleniumServer=server1 test
请注意,正如安德烈所说mvn测试插件可能不会再运行它已经运行了。但你的陈述似乎与安德烈斯的回答相矛盾。
如果您认为Jenkins在翻译属性时遇到了麻烦,请尝试在没有Maven的情况下为调试目的提供一些更基本的工作,例如执行shell 并执行echo ${SELENIUM_SERVER}
构建或预构建,以确切了解Jenkins的作用。