如何在 C# 中读取 Travis CI 设置的环境变量
How to read Environment variable set by Travis CI in C#
我创建了一个单元测试项目,它需要一个不是 public 的密钥,所以我可以在本地从 App.config 读取它,但 Travis CI 不会有这把钥匙。
所以我在 Travis CI 中添加了一个环境变量,如下所示:
当 Travis CI 构建启动时,它会在日志中显示我的变量:
Setting environment variables from repository settings
$ 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
那么我怎样才能真正读取这个密钥呢?
更新:
我不清楚为什么它首先不起作用,但上面的示例在我 运行 构建时第二次起作用。
根据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);
试试这个
我刚刚在 Travis CI 上试过这个 CI 并且 Environment.GetEnvironmentVariable("TestKey");
在一个简单的控制台应用程序中对我来说工作正常(在重载中指定 EnvironmentVariableTarget.User
或 .Machine
不会虽然)。
您的构建和配置没有问题。
似乎在存储库上配置的环境变量通常需要一些时间才能在构建中使用(与 .travis.yml env vars 不同)。
我创建了一个单元测试项目,它需要一个不是 public 的密钥,所以我可以在本地从 App.config 读取它,但 Travis CI 不会有这把钥匙。
所以我在 Travis CI 中添加了一个环境变量,如下所示:
当 Travis CI 构建启动时,它会在日志中显示我的变量:
Setting environment variables from repository settings
$ 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
那么我怎样才能真正读取这个密钥呢?
更新: 我不清楚为什么它首先不起作用,但上面的示例在我 运行 构建时第二次起作用。
根据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);
试试这个
我刚刚在 Travis CI 上试过这个 CI 并且 Environment.GetEnvironmentVariable("TestKey");
在一个简单的控制台应用程序中对我来说工作正常(在重载中指定 EnvironmentVariableTarget.User
或 .Machine
不会虽然)。
您的构建和配置没有问题。
似乎在存储库上配置的环境变量通常需要一些时间才能在构建中使用(与 .travis.yml env vars 不同)。