Azure 应用服务 JSON 使用 KeyVault 进行转换

Azure App Service JSON Transform using KeyVault

我正在考虑将 .Net Core WebApi 服务部署到 Azure 应用服务,作为部署的一部分,我很想用 CosmosDb 连接字符串更新 appsettings.json 中的连接字符串。我有一个 Azure KeyVault,其中将连接字符串作为秘密存储在其中。

为 CI/CD 使用 YAML 构建管道 我从我的管道中得到以下(片段)

          - task: AzureKeyVault@1
            inputs:
              azureSubscription: '<service-principal>'
              KeyVaultName: '<keyvault-name>'
              SecretsFilter: '*'
              RunAsPreJob: true
          
          - task: AzureRmWebAppDeployment@4
            inputs:
              ConnectionType: 'AzureRM'
              azureSubscription: '<service-principal>'
              appType: 'webApp'
              WebAppName: '<ci-resource-group>'
              VirtualApplication: '/'
              packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
              JSONFiles: '**/appsettings.json'

这两个任务处于从下载上一阶段发布的工件开始的阶段。

因此 Azure App Service Deploy 任务可以进行 JSON 转换,但我需要定义一个格式为 ConnectionStrings:CosmosDb 的变量,其值来自存储在密钥库中的秘密,而我不是一定要怎么做!

到目前为止我发现的所有内容都指向经典发布管道,并使用变量组,但这需要成为 YAML 管道的一部分。

关注docs

To substitute values in nested levels of the file, concatenate the names with a period (.) in hierarchical order.

但是你的秘密名称中不能有点,所以你必须在这两个步骤之间做一个小的重写:

- powershell: |
     echo "##vso[task.setvariable variable=ConnectionStrings.CosmosDb;]$(ConnectionStrings-CosmosDb)"

你的秘密在哪里ConnectionStrings-CosmosDb