构建参数仅在预步骤中使用

时间:2014-06-22 20:04:05

标签: maven jenkins continuous-integration

我为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.

如果我删除了预构建步骤,则该参数将正确应用于构建步骤。

如何将参数应用于构建步骤,而不仅仅是预构建步骤?

提前致谢!

2 个答案:

答案 0 :(得分:1)

根据您的问题,我认为installtest配置为两个不同的构建步骤。如果你看一下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目标时,指定一些选项(请参阅高级版)

  • 目标,
  • POM和
  • 属性

确保在预构建步骤中,您将安装作为目标,并使用

的属性部分
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的作用。