2014-06-22 17 views
0

我已經爲Jenkins作業定義了SELENIUM_SERVER字符串參數。構建參數僅用於預先步驟

的工作也有預生成步:

調用頂級Maven的目標這確實

install -Dproject.build.sourceEncoding=Cp1252

和建設步驟,還調用Maven的有以下目標

test -DseleniumServer=${SELENIUM_SERVER}

但是whe n我運行這個工作,它看起來像參數僅用於運行預構建步驟的階段,並在構建步驟階段被忽略。

日誌說以下內容:

[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.

如果刪除預生成步驟中,參數被施加到正確的構建步驟。

如何將參數應用於構建步驟,而不僅僅是預構建步驟?

在此先感謝!

回答

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"出現在test之前。

因此,通過運行您的第一個目標install將運行整個默認生命週期,包括測試。既然你沒有指定它失敗的參數,並且失敗了,第二個目標test甚至沒有被執行。錯誤是在你的第一個目標期間拋出的,而不是你的第二個目標。

+0

你說得對,謝謝! –

0

沒有看到你的確切Jenkins配置可能很難提出一個確切的答案,但我想我知道答案是什麼。

詹金斯通常不知道構建步驟實際執行與否。它只是調用它們。

當它發出步驟時,您應該能夠在日誌中明確地看到。我注意到你在預生成步驟提出的日誌信息,而不是從構建步驟

[Automation] $ /home/build/tools/hudson.tasks.Maven_MavenInstallation/Maven_3/bin/mvn 
-DSELENIUM_SERVER=<server1> install 

但是,看來該參數在這裏應用的某些原因。這通常意味着它使用該選項貫穿整個maven構建(包括測試),並且您應該成功完成第一個maven工作。

但你說你在第二步失敗?

當您設置在詹金斯一個maven目標,您可以指定一些選項(參見下高級)

  • 目標,
  • 的POM和
  • 屬性

確保在預構建步驟下,您將安裝爲作爲目標,而屬性部分爲

project.build.sourceEncoding=Cp1252 

單獨一行。這些將被轉換爲-D指令。

日誌應該仍然呈現符合

mvn -Dproject.build.sourceEncoding=Cp1252 install 

並沒有太多的更多,這。

在構建步驟,可以肯定的是,我們的目標是測試,並且該屬性部分只有

seleniumServer=${SELENIUM_SERVER} 

包含這應該轉化爲

mvn -DseleniumServer=server1 test 

注意,安德烈說:如果它已經運行,mvn測試插件可能不會再運行。但是你的陳述似乎與Andres的答案相矛盾。

如果您認爲詹金斯是真的有麻煩翻譯的屬性,嘗試想出爲了調試的目的,而不Maven的一些基礎性工作,如執行shell,做在構建或預先建立一個echo ${SELENIUM_SERVER},看正是詹金斯所做的。

相關問題