Adr*_*eer 6 .net c# mstest azure-keyvault azure-devops
我在 Azure KeyVault 中存储了几个秘密。不幸的是,我找不到通过 VSTS(Visual Studio Team Services)将参数传递给我的 .net Core 2.0 测试运行的方法
文档说 Keyvault 机密只能通过 VSTS 变量提供 - 足够公平 - 但我实际上如何做到这一点?我在网上能找到的所有信息似乎都已过时或不起作用。
例如 - 考虑 RunSettings 文件:
<RunSettings>
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" />
<Parameter name="webAppPassword" />
</TestRunParameters>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
我尝试通过 cmd 行传递最后 2 个参数的值,如下所示:
vsts.console MyTest.dll /Settings:vsts.runsettings -- -webAppUserName foo
vsts.console MyTest.dll /Settings:vsts.runsettings -- webAppUserName=foo
dotnet test -s vsts.runsettings -- -webAppUserName foo
dotnet test -s vsts.runsettings -- webAppUserName=foo
Run Code Online (Sandbox Code Playgroud)
但这没有效果 - webAppUserName 值保持为空(我可以看到 webAppUrl 的值,所以我知道我的代码是正确的!)
我还尝试了 VSTS“dotnet 测试”任务以及我的 VSTS 2017 版本中的“VsTest”任务。VsTest 提供了覆盖测试运行参数设置 - 根据工具提示,我尝试过:
-webAppUserName user -webAppPassword somethingSecret
Run Code Online (Sandbox Code Playgroud)
再次 - 没有效果!
最初我使用 xUnit 并且有完全相同的问题 - 即无法找到通过 VSTS 传递参数的方法 - 所以我尝试了 MSTest,但同样的问题。
回到我通过 VS Studio 在本地注入 KeyVault 机密的原始问题,我能够从我的测试中执行以下操作:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
...
.AddAzureKeyVault(...)
Run Code Online (Sandbox Code Playgroud)
不幸的是,当通过 VSTS 运行时,测试运行器只是挂起(即我必须在几分钟后停止它),如果我使用任何一个都没有测试步骤的日志输出
.AddAzureKeyVault(...)或.AddEnvironmentVariables()
所以我尝试使用 VSTS 变量组 - 并将其链接到 KeyVault。但是,无法通过环境变量访问密钥库机密(直接从 C# 使用 Enviroment.GetEnvironmentVariable(...)) - 所以这是不好的。他们说你只能通过 VSTS 变量将这些传递给任务......因此我的问题!
旁白: 即使我可以使用环境变量,这也不是最佳选择,因为在使用 .AddAzureKeyVault() 时,我可以提供自定义 IKeyVaultSecretManager,例如,用“:”字符替换特殊分隔符 - 这意味着我可以嵌套我的 json配置值 - 例如,如果我的配置文件中有这个:
{ "A" : { "B" : "somevalue" } }
Run Code Online (Sandbox Code Playgroud)
然后使用普通的配置构建器,我可以通过 config["A:B"] 访问上面的内容。不幸的是,KeyVault 不喜欢“:”字符——所以你必须用“--”之类的东西替换它,然后使用自定义的 IKeyVaultSecretManager 用“:”替换“--”(这很好用,并确保变量是根据配置生成器中注册的提供程序的顺序正确覆盖)
请帮忙!圣诞节我想要的只是不要将我的 KeyVault 机密放入 Git...但是 VSTS KeyVault grinch 破坏了我的乐趣...我肯定错过了什么?