2015-04-14 6 views
5

In meinem Scala-Test habe ich über sys.props.getOrElse("cassandra.test.host", DEFAULT_CASSANDRA_TEST_HOST) eine Umgebungsvariable gelesen.Wie übergebe ich Umgebungsvariablen an einen sbt-Test-Build-Schritt in Jenkins?

Die Tests werden über Jenkins ausgeführt.

Ich habe eine Build using sbt als Build-Schritt hinzugefügt.

von über SO bei ähnlichen Fragen suchen, kam ich mit dieser Lösung auf - das heißt, das Feld zu Aktionen setzen:

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

Aber es funktioniert nicht. Wenn Properties.envOrElse ausgeführt wird, wird keine Variable gesetzt.

Die Jenkins Konsolenausgabe enthält:

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

Welchen Testrahmen verwenden Sie? –

+0

Ich benutze scalatest – piercarlo

Antwort

8

Wenn Sie keine neue JVM zur Ausführung Ihrer Tests zwingen, kann die Einstellung javaOptions nichts bewirken. Auszug aus SBT selbst:

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

Dies erklärt, warum Ihre javaOptions nicht verwendet werden, wenn Sie nicht Ihre Tests gabeln.

Sie haben grundsätzlich zwei Lösungen:

  • Entweder fork in Test := true setzen Ihre Tests in gegabelten JVMs
  • Oder geben Ihre Systemeigenschaften SBT selbst auszuführen:

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

0

Sie eine Systemeigenschaft mit -Dcassandra.test.host=XX.XXX.XXX.XXX" Einstellung, aber dann Properties.envOrElse verwendet, die für Umgebungsvariablen ist. Siehe Environment Variables.

Try this:

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

Guter Punkt; Code-Änderung wie vorgeschlagen - aber immer noch nicht funktioniert ... – piercarlo

1

Es scheint, dass fork in Test := true Zugabe löst das Problem - auch wenn, um ehrlich zu sein, ich nicht die extact corrlation zwischen den beiden Ereignissen untersucht hat (dh das Hinzufügen fork in Test := true und die Systemeigenschaft . geben meiner Tests

das richtige Argument also zu sbt übergeben werden soll:

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

Verwandte Themen