0
  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) 而不是来自 keyvault 的实际密钥?

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

1 回答 1

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

有关更多信息和示例,请参阅定义变量:设置秘密变量

于 2020-04-03T07:10:42.927 回答