[英]Azure DevOps CI Pipeline for Function with KeyVault integration
我创建了一些集成测试,尝试访问 Azure Key Vault,但由于身份验证失败而未能这样做。 这是由 Azure DevOps 中的“运行测试”任务触发的。
我已经尝试将 Azure CLI 登录(用于代理)作为前面的步骤,但似乎每个步骤都在它自己的环境中运行。
这是我尝试失败的 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)
以下代码是身份验证失败的地方:
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 Studio 具有登录功能。 我对这一切都很陌生,所以如果有人可以建议这如何在 CI 工作中工作?
可能是您在 Azure Devops 管道变量中将AZURE_CLIENT_SECRET
定义为机密。 这些值无法在常规构建步骤之外获取。 在这个答案中巧妙地解释了: https://stackoverflow.com/a/50113557/2915851
解决方案是在 cmd/powershell 脚本中导出秘密变量,然后在后续步骤中使用它:
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;]$(AZURE_CLIENT_SECRET_VALUE)"
注意:这里的关键是在管道变量列表中为变量使用不同的名称。 如果变量名称与您要向后续任务显示的环境变量相同,Azure Devops (再次)将其保密。
其他变量( AZURE_TENANT_ID
和AZURE_CLIENT_ID
)可以保留为常规管道变量,不需要为UseDotNet@2
任务导出来访问它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.