我已经为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.
如果删除预生成步骤,则参数将正确应用于生成步骤。
如何使参数应用到生成步骤,而不仅仅是预构建步骤?
提前感谢!
发布于 2014-06-25 11:39:53
从您的问题中,我认为install和test被配置为两个不同的构建步骤。如果你看一下Maven生命周期,你会发现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的第二个目标甚至没有执行。错误是在第一个目标期间抛出的,而不是在第二个目标中抛出的。
发布于 2014-07-01 08:58:03
如果没有看到您确切的Jenkins配置,可能很难找到一个精确的答案,但我想我知道答案是什么。
Jenkins通常不知道构建步骤实际执行与否。它只会召唤他们。
当日志发出步骤时,您应该能够显式地在日志中看到。我注意到您显示的日志消息来自于预构建步骤,而不是构建步骤。
[Automation] $ /home/build/tools/hudson.tasks.Maven_MavenInstallation/Maven_3/bin/mvn
-DSELENIUM_SERVER=<server1> install然而,这一论点似乎是出于某种原因而在这里适用的。这通常意味着它使用该选项运行整个maven构建(包括测试),您可能会成功完成第一个maven作业。
但你说你在第二步就失败了?
在jenkins中设置maven目标时,可以指定一些选项(参见高级)
确保在预构建步骤下,以install为目标,并将属性部分与
project.build.sourceEncoding=Cp1252在另一条线上。这些内容将被转换为-D指令。
日志仍应显示一行
mvn -Dproject.build.sourceEncoding=Cp1252 install 再没有比这更多了。
在构建步骤下,确保目标是test,并且属性部分只包含
seleniumServer=${SELENIUM_SERVER}这应该转化为
mvn -DseleniumServer=server1 test注意,正如Andre所说,如果mvn测试插件已经运行,它可能不会再次运行。但你的说法似乎与安德烈斯的回答相矛盾。
如果您认为Jenkins在转换属性时确实遇到了困难,那么可以尝试在不使用Maven的情况下为调试目的提出一些更基本的任务,例如execute shell,并在构建或预构建中执行echo ${SELENIUM_SERVER},以查看Jenkins到底做了什么。
https://stackoverflow.com/questions/24355235
复制相似问题