Получение значения переменной в лазурном конвейере
enviornment: 'dev'
acr-login: $(enviornment)-acr-login
acr-secret: $(enviornment)-acr-secret
dev-acr-login и dev-acr-secret - это секреты, хранящиеся в keyvault для входа в систему acr и секрета acr.
В Pipeline получение секретов с помощью этой задачи
- task: AzureKeyVault@1
inputs:
azureSubscription: $(connection)
KeyVaultName: $(keyVaultName)
SecretsFilter: '*'
Эта задача создаст переменные задачи с именами dev-acr-login и dev-acr-secret.
Нет, если я хочу войти в докер, я не могу этого сделать
Следующий код работает, и я могу войти в 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'
1 ответ
Вы можете передать их как переменные среды:
- 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
См. Раздел Определение переменных: установка секретных переменных для получения дополнительной информации и примеров.