【问题标题】:Pass an environment variable into SBT to use in a Specs2 test?将环境变量传递给 SBT 以在 Specs2 测试中使用?
【发布时间】:2014-03-28 07:42:08
【问题描述】:

将环境变量传递到 SBT 以便可以使用 Specs2 访问的正确方法是什么? (然后检索 Specs2 中的值。)环境变量将包含用于测试的 API 密钥。

它需要是一个环境变量才能使用 Travis CI 的加密环境变量功能[1]

我的设置:

  1. SBT 0.13.0
  2. 规格2 2.3.4
  3. 特拉维斯 CI

编辑: 如果有人可以链接到执行此操作的开源存储库,则可以加分。肯定有几个!

[1]Using secret api keys on travis-ci

【问题讨论】:

    标签: sbt travis-ci specs2


    【解决方案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 文档吗?我重新检查过,我仍然只能找到 Travis 文档,其中详细说明了加密 环境变量(即 $KEY=blah)。
    • 不抱歉,这与其说是实际实验,不如说是推测,我自己从未尝试过,也不知道有任何项目这样做。
    【解决方案2】:

    根据您的问题,我认为您希望使用 Travis's built-in support for encryption 传递安全环境变量?

    如果是在 SBT 运行之前设置环境变量,那么它应该对所有进程都可用。我不使用 Specs,但获取环境变量的标准 JVM 方法是使用 System.getenv(String)可能 sbt 在运行 Specs 之前删除环境变量;如果这是真的,那么必须以某种方式在你的 build.sbt 中进行修复,而不是特定于 Travis。

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2021-01-15
      • 2019-09-20
      • 2013-12-29
      • 1970-01-01
      • 2021-09-05
      • 2020-03-27
      • 2017-03-30
      • 2018-08-19
      相关资源
      最近更新 更多