如何在C#中读取由Travis CI设置的环境变量

时间:2015-04-10 00:19:02

标签: c# mono travis-ci

我创建了一个单元测试项目,该项目需要一个非公开的密钥,因此我可以在本地从App.config中读取它,但是Travis CI没有这个密钥。

所以我在Travis CI中添加了一个环境变量,如下所示: Travis CI Environment Variables

当Travis CI构建开始时,它会在日志中显示我的变量:

  

从存储库设置中设置环境变量
  $ export TestKey = TestValue

但根据日志,读取密钥的简单测试失败,并显示错误消息Key not set as environment variable

[Test]
public void TestTravisEnvVariable()
{
    string testKey= Environment.GetEnvironmentVariable("TestKey");

    Assert.IsNotNullOrEmpty(testKey, "Key not set as environment variable");
}

Environment.GetEnvironmentVariable方法读取当前进程的变量。,但显然在这种情况下无法读取密钥。

那我怎么能真正读到这把钥匙呢?

更新 我不清楚为什么它首先不起作用,但上面的示例仅在我第二次运行构建时工作。

3 个答案:

答案 0 :(得分:2)

我刚试过Travis CI并且Environment.GetEnvironmentVariable("TestKey");在一个简单的控制台应用程序中工作正常(但在重载中指定EnvironmentVariableTarget.User.Machine)。

答案 1 :(得分:0)

根据this answer

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; 
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("Variable You Want To Get", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

试试这个

答案 2 :(得分:0)

您的构建和配置很好。

似乎在存储库上配置的环境变量通常需要一些时间才能在构建上使用(与.travis.yml env vars不同)。