变量内部变量Azure管道

时间:2020-02-25 13:44:45

标签: azure azure-devops

在使用Azure Vault存储我的机密和使用.properties文件存储机密名称(因此它不在管道中进行硬编码)并稍后从Azure DevOps管道访问它时,我遇到了一个问题: .properties文件:

...
SERVER_ADMIN_SECRET_NAME=server-password-test
...

我正在使用模板管道,该管道读取文件并将所有key = values导出为$(property),并将相应的值导出为全局属性(##vso[task.setvariable variable=$KEY]$VAL)。

当我调用Azure Key Vault时,它将返回密钥名称和导出变量$(server-password-test),以便以后使用。但是,我无法访问它,因为变量名是另一个变量$(SERVER_ADMIN_SECRET_NAME)的值。解决方案应该在变量$($(SERVER_ADMIN_SECRET_NAME))中使用变量,但是在Azure Pipelines中不起作用。

我的管道如下所示:

...
- template: read_properties.yml
  parameters:
    file: config.properties

- task: AzureKeyVault@1
  inputs:
    azureSubscription: 'vault-service-connection'
    KeyVaultName: 'test-playground'
    SecretsFilter: '$(SERVER_ADMIN_SECRET_NAME)'

# TODO : How to fix this??
- task: CmdLine@2
  inputs:
    script: |
      echo $($(SERVER_ADMIN_SECRET_NAME))
...

图:
enter image description here

1 个答案:

答案 0 :(得分:1)

对于此问题,管道中尚不支持嵌套变量的值(如$($(SERVER_ADMIN_SECRET_NAME)))。您可以参考此case来了解这一点。

我能想到的解决方法是将Variable Toolbox任务添加到构建步骤的顶部。

在此任务中,您可以为变量设置嵌套变量值。

enter image description here

enter image description here

enter image description here

您可以参考此case来完成此任务。