2015-04-14 107 views
5

在我的scala測試中,我通過sys.props.getOrElse("cassandra.test.host", DEFAULT_CASSANDRA_TEST_HOST)讀取environemnt變量。如何將環境變量傳遞給Jenkins中的sbt測試構建步驟?

測試通過Jenkins運行。

我已經添加了一個Build using sbt作爲構建步驟。

通過觀察在如此相似的問題,我想出了這個解決方案 - 即操作字段設置爲:

'; set javaOptions += "-Dcassandra.test.host=XX.XXX.XXX.XXX"; test'

但它不工作。執行Properties.envOrElse時,不設置變量。

詹金斯控制檯輸出包含:

[...] [util-sessionizer] $ java -jar /usr/local/bin/sbt-launch.jar '; set javaOptions += "-Dcassandra.test.host=XX.XXX.XXX.XXX"; test' [info] Loading project definition from /jenkins/workspace/util-sessionizer/project/project [info] Loading project definition from /jenkins/workspace/util-sessionizer/project [info] Set current project to util-sessionizer (in build file:/jenkins/workspace/util-sessionizer/) [info] Defining *:javaOptions [info] The new value will be used by *:runner, compile:run::runner and 4 others. [info] Run `last` for details. [info] Reapplying settings... [...]

+0

你在使用什麼測試框架? –

+0

我正在使用scalatest – piercarlo

回答

8

如果您沒有分配新的JVM來執行測試,則設置javaOptions不會執行任何操作。從SBT本身 摘錄:

> help javaOptions 
Options passed to a new JVM when forking. 

這就解釋了爲什麼當你不分叉你測試你的javaOptions不使用。

主要通過兩種解決方案:

  • 要麼設置fork in Test := true在分叉的JVM
  • 運行測試,或者通過你的系統性能,SBT本身:

    sbt -Dcassandra.test.host=XX.XXX.XXX.XXX test

0

你設置一個系統屬性-Dcassandra.test.host=XX.XXX.XXX.XXX",但是如果使用Properties.envOrElse這是環境變量。請參閱Environment Variables

試試這個:

sys.props.getOrElse("cassandra.test.host", DEFAULT_CASSANDRA_TEST_HOST) 
+0

好點;代碼更改建議 - 但仍然無法正常工作... – piercarlo

1

看來,加入fork in Test := true解決了這個問題 - 就算了,說實話,我沒有調查兩個事件之間的extact corrlation(即添加fork in Test := true和具有系統屬性。傳遞給我的測試

因此被傳遞到SBT正確的說法是:

'; set fork in Test := true; set javaOptions += "-Dcassandra.test.host=XX.XXX.XXX.XXX"; test'

相關問題