我创建了一些尝试访问Azure密钥库的集成测试,但由于身份验证失败而失败。这是由Azure DevOps中的“运行测试”任务触发的。
我尝试过将Azure登录(用于代理)作为前面的步骤,但似乎每个步骤都在自己的环境中运行。

下面是我尝试的yaml备选方案的一个片段,但没有成功:
steps:
- task: UseDotNet@2
displayName: Setup .NET Core
inputs:
packageType: 'sdk'
version: '3.1.x'
- script: dotnet build --configuration Release
displayName: Build with dotnet
workingDirectory: BatchDependencyFnApp
- script: dotnet test --configuration Release --logger trx
displayName: Test with dotnet
workingDirectory: BatchDataRetriever.Tests
env:
AZURE_TENANT_ID: $(AZURE_TENANT_ID)
AZURE_CLIENT_SECRET: $(AZURE_CLIENT_SECRET)
AZURE_CLIENT_ID: $(AZURE_CLIENT_ID)以下代码是auth失败的地方:
var cred = new ChainedTokenCredential(new ManagedIdentityCredential(), new AzureCliCredential(), new EnvironmentCredential());
var secretClient = new SecretClient(new Uri(keyVaultUri), cred);
var opt = new AzureKeyVaultConfigurationOptions { ReloadInterval = TimeSpan.FromHours(24) };
builder.ConfigurationBuilder
.AddAzureKeyVault(secretClient, opt)
.Build();底层的错误消息是:原始异常: AADSTS7000215:无效的客户端机密被提供。
这在本地很好,因为Visual具有登录功能。我对所有这些都是新手,所以如果有人能给我建议一下如何在CI工作中工作呢?
发布于 2021-11-04 13:34:52
您可能将AZURE_CLIENT_SECRET定义为Azure管道变量中的一个秘密。这些值不能在常规构建步骤之外提取。在这个答案中解释得很清楚:https://stackoverflow.com/a/50113557/2915851
解决方案是在随后的步骤中使用这个秘密变量之前,先在cmd/powershell脚本中导出它:
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;]$(AZURE_CLIENT_SECRET_VALUE)"注意:这里的关键是要为管道变量列表中的变量有一个不同的名称。如果变量名与您希望显示给后续任务的环境变量相同,则Azure将其保密(再次).
其他变量(AZURE_TENANT_ID和AZURE_CLIENT_ID)可以保持为常规管道变量,并且不需要为UseDotNet@2任务导出来访问它们。
https://stackoverflow.com/questions/67192022
复制相似问题