【发布时间】:2014-03-28 07:42:08
【问题描述】:
将环境变量传递到 SBT 以便可以使用 Specs2 访问的正确方法是什么? (然后检索 Specs2 中的值。)环境变量将包含用于测试的 API 密钥。
它需要是一个环境变量才能使用 Travis CI 的加密环境变量功能[1]
我的设置:
- SBT 0.13.0
- 规格2 2.3.4
- 特拉维斯 CI
编辑: 如果有人可以链接到执行此操作的开源存储库,则可以加分。肯定有几个!
【问题讨论】:
将环境变量传递到 SBT 以便可以使用 Specs2 访问的正确方法是什么? (然后检索 Specs2 中的值。)环境变量将包含用于测试的 API 密钥。
它需要是一个环境变量才能使用 Travis CI 的加密环境变量功能[1]
我的设置:
编辑: 如果有人可以链接到执行此操作的开源存储库,则可以加分。肯定有几个!
【问题讨论】:
我猜你可以用 travis api 加密你的密钥并得到:
xxxEncryptedxxx
然后你可以使用CommandLineArguments trait 将参数从 SBT 的命令行传递给你的规范。
在.travis.yml
sbt ++$TRAVIS_SCALA_VERSION testOnly *MySpec* -- key xxxEncryptedxxx
在MySpec.scala
class MySpec extends mutable.Specification with CommandLineArguments {
"this is an API test" >> {
arguments.commandLine.value("key").map { k =>
callApi(k) must beOk
}.getOrElse(ko("you need to pass a key on the command line"))
}
}
【讨论】:
根据您的问题,我认为您希望使用 Travis's built-in support for encryption 传递安全环境变量?
如果是在 SBT 运行之前设置环境变量,那么它应该对所有进程都可用。我不使用 Specs,但获取环境变量的标准 JVM 方法是使用 System.getenv(String)。 可能 sbt 在运行 Specs 之前删除环境变量;如果这是真的,那么必须以某种方式在你的 build.sbt 中进行修复,而不是特定于 Travis。
【讨论】: