繁体   English   中英

Azure DevOps CI 管道,用于 Function 与 KeyVault 集成

[英]Azure DevOps CI Pipeline for Function with KeyVault integration

我创建了一些集成测试,尝试访问 Azure Key Vault,但由于身份验证失败而未能这样做。 这是由 Azure DevOps 中的“运行测试”任务触发的。

我已经尝试将 Azure CLI 登录(用于代理)作为前面的步骤,但似乎每个步骤都在它自己的环境中运行。

Azure DevOps 管道任务

这是我尝试失败的 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_IDAZURE_CLIENT_ID )可以保留为常规管道变量,不需要为UseDotNet@2任务导出来访问它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM