Как передать переменные среды на шаг сборки теста 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)