【问题标题】:How to read Environment variable set by Travis CI in C#如何在 C# 中读取 Travis CI 设置的环境变量
【发布时间】:2015-06-15 13:44:30
【问题描述】:

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

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

当 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方法读取当前进程的变量。,但显然这种情况下无法读取key。

那么我如何才能真正读取这个密钥呢?

更新: 我不清楚为什么它一开始就不起作用,但上面的示例在我第二次运行构建时才起作用。

【问题讨论】:

    标签: c# mono travis-ci


    【解决方案1】:

    根据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);
    

    试试这个

    【讨论】:

    • Travid CI 不会向注册表添加密钥,而是向环境变量添加密钥。
    【解决方案2】:

    我刚刚在 Travis CI 上试过这个,Environment.GetEnvironmentVariable("TestKey"); 在一个简单的控制台应用程序中对我来说效果很好(在重载中指定EnvironmentVariableTarget.User.Machine 不会)。

    【讨论】:

      【解决方案3】:

      您的构建和配置很好。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        相关资源
        最近更新 更多