在Azure DevOps YAML中,可以在get变量中使用另一个变量。
我的特定问题是有关使用Azure Key Vaults任务的。 使用以下任务:
- task: AzureKeyVault@1
displayName: 'Get Secrets $(KeyVault_Key) from ${{parameters.KeyVaultName}}'
inputs:
azureSubscription: ${{parameters.azureSubscription}}
KeyVaultName: ${{parameters.KeyVaultName}}
SecretsFilter: '$(KeyVault_Key)'
RunAsPreJob: true
我在库中有一个名为KeyVault_Key
的变量,并将其传递到过滤器中。
Key Vault任务将使用该变量的值创建一个新变量。
例如如果KeyVault_Key = "mySecretKey"
会创建一个变量,您可以以$(mySecretKey)
的身份访问
但是,当尝试使用可变命令访问所有这些命令时,它不起作用。
例如$($(KeyVault_Key))
我也尝试过变量
例如$(${{variables.KeyVault_Key}})
**更新**
这是根据建议使用变量解决方案的示例。
- stage: 'Deploy'
displayName: 'Deploy Application'
variables:
- name: "sqlConnectionNameKey"
value: '$(TF_VAR_MYSQL_SERVER_USERNAME_KEY)'
- name: "sqlConnectionPwdKey"
value: '$(TF_VAR_MYSQL_SERVER_PASSWORD_KEY)'
jobs:
- deployment: DeployApiDatabase
pool:
name: Default
environment:
name: Azure
strategy:
runOnce:
deploy:
steps:
- task: AzureKeyVault@1
displayName: 'Get Secrets'
inputs:
azureSubscription: ${{parameters.azureSubscription}}
KeyVaultName: '$(TF_VAR_RESOURCE_PREFIX)-kv'
SecretsFilter: '${{variables.sqlConnectionNameKey}}, ${{variables.sqlConnectionPwdKey}}'
RunAsPreJob: true
- task: AzureMysqlDeployment@1
displayName: 'Deploy ApplicationConfigurationDbContext DB'
inputs:
azureSubscription: ${{parameters.azureSubscription}}
ServerName: '$(sqlServerName).mysql.database.azure.com'
DatabaseName: 'DatabaseName'
SqlUsername: '$(sqlConnectionNameKey)@$(sqlServerName)'
SqlPassword: '$(sqlConnectionPwdKey)'
TaskNameSelector: 'SqlTaskFile'
SqlFile: '${{variables.mySqlLocation}}DbContext.sql'
IpDetectionMethod: 'AutoDetect'
答案 0 :(得分:1)
否,这是不可能的。您不能嵌套它们。因此,如果您想立即使用您的秘密值,可以尝试使用Azure Cli task
- task: AzureCLI@2
inputs:
azureSubscription: '${{parameters.azureSubscription}}'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
$secretValue = az keyvault secret show --vault-name ${{parameters.KeyVaultName}} --name $(KeyVault_Key) --query value -o tsv
echo $secretValue
但是,如果这不能解决您的问题,恐怕您被迫重新设计想法。
答案 1 :(得分:1)
azure管道中尚不支持嵌套变量。用户声音已提交给Microsoft开发团队。您可以投票here或提交新的投票。
作为一种解决方法,您可以定义一个新变量并将其值映射到变量$(KeyVault_Key)
。参见以下示例:
variables:
- name: SecretKeyFromKeyVault
value: $(KeyVault_Key)
然后,您可以使用mySecretKey
来引用Key Vault任务创建的变量$(SecretKeyFromKeyVault)