在天青管道中获取可变值的值

时间:2020-04-02 18:31:52

标签: bash azure-keyvault azure-pipelines-yaml

  enviornment: 'dev'
  acr-login: $(enviornment)-acr-login
  acr-secret: $(enviornment)-acr-secret

dev-acr-login和dev-acr-secret是存储在keyvault中的密码,用于acr登录和acr机密。

在管道中,通过此任务获取机密

      - task: AzureKeyVault@1
        inputs:
          azureSubscription: $(connection)
          KeyVaultName: $(keyVaultName)
          SecretsFilter: '*'

此任务将创建名称为'dev-acr-login'和'dev-acr-secret'的任务变量

如果我要登录Docker,则无法这样做

以下代码有效,我能够登录到acr。

      - bash: |
          echo $(dev-acr-secret) | docker login \
              $(acrName) \
              -u $(dev-acr-login) \
              --password-stdin
        displayName: 'docker login'

以下操作无效。有没有一种方法可以使用变量名$(acr-login)和$(acr-secret),而不是密钥库中的实际密钥?

      - bash: |
          echo $(echo $(acr-secret)) | docker login \
              $(acrRegistryServerFullName) \
              -u $(echo $(acr-login)) \
              --password-stdin
        displayName: 'docker login'

1 个答案:

答案 0 :(得分:0)

您可以将它们作为环境变量传递:

- bash: |
    echo $(echo $ACR_SECRET) | ...
  displayName: docker login
  env:
    ACR_SECRET: $(acr-secret)

但是,与您在另一个示例中所说的仅回显密码值相反,它的目的是什么?只要任务正在创建安全变量,它们就会在日志中受到保护。您仍然需要这样做,因为如果有人启用了诊断功能(否则任何人都可以这样做),否则它们会显示在诊断日志中。

执行此操作的示例:

- bash: |
    echo "##vso[task.setvariable variable=acr-login;issecret=true;]$ACR_SECRET"
  env:
    ACR_SECRET: $($(acr-secret)) # Should expand recursively

有关更多信息和示例,请参见Define variables : Set secret variables