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'
答案 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。