Как передать переменные среды на шаг сборки теста sbt в Jenkins?

в моем тесте scala я читаю переменную environemnt через sys.props.getOrElse("cassandra.test.host", DEFAULT_CASSANDRA_TEST_HOST).

тесты выполняются через Дженкинса.

я добавил Build using sbt Как построить шаг.

посмотрев на подобные вопросы на SO, я придумал это решение-т. е. установив поле действий в:

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

3 ответов


если вы не разветвляете новую JVM для выполнения тестов, установите javaOptions ничего не делает. Выдержка из самого SBT:

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

Это объясняет, почему ваш javaOptions не используются, когда вы не разветвление тестов.

у вас есть в основном два решения:

  • либо set fork in Test := true для запуска тестов в раздвоенных JVMs
  • или передайте свои системные свойства самому SBT:

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


кажется, что добавление fork in Test := true решает проблему-даже если, честно говоря, я не исследовал корреляцию экстакта между двумя событиями (т. е. добавление fork in Test := true и наличие системного свойства, переданного моим тестам.

таким образом, правильный аргумент для передачи sbt:

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


вы устанавливаете системное свойство с -Dcassandra.test.host=XX.XXX.XXX.XXX", а затем с помощью Properties.envOrElse что для переменных среды. См.Переменные Среды.

попробуйте это:

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