我正在尝试在 azure 管道中的变量内使用变量。 下面是 bash 脚本的示例:
#!/bin/bash
customer=google
environment=preprod
android_google_preprod_account_activation_url=preprod.google.com
echo "Customer is $customer"
echo "Environment is $environment"
var1=android_${customer}_${environment}_account_activation_url
echo "variable is $var1"
echo "original value is ${!var1}"
当我在 Ubuntu 服务器上运行上述 bash 脚本时,我得到了预期的输出,没有错误:
Customer is google
Environment is preprod
variable is android_google_preprod_account_activation_url
original value is preprod.google.com
azure 管道的 yml 代码是:
parameters:
- name: customer
displayName: 'select customer'
type: string
values:
- google
- name: environment
displayName: 'select environment'
type: string
values:
- preprod
variables:
- group: android-${{ parameters.customer }}-${{ parameters.environment }}
- name: var1
value: android-${{ parameters.customer }}-${{ parameters.environment }}-account-activation-url
script: |
echo "Customer is $(customer)"
echo "Environment is $(environment)"
echo "variable is $(var1)"
echo "original value is $(!var1)"
displayName: 'echo variables'
android-google-preprod-account-activation-url 的值是从库内的变量组中获取的。
第四行出现错误:
invalid indirect expansion
前 3 行输出符合预期。
预期输出是:
Customer is google
Environment is preprod
variable is android_google_preprod_account_activation_url
original value is preprod.google.com
azure 管道中是否需要遵循不同的语法?
最佳答案
宏语法“$(varName)
”是 Azure Pipelines 中用于插入变量值的专有语法。它在运行时处理,与 Bash 脚本中的语法“${varName}
”不同。
对于您的情况,您可以尝试使用编译时语法“${{variables.varName }}
”来获取管道中的值。
echo "original value is $(${{ variables.var1 }})"
通过上述更改,触发管道后:
- 在编译时,表达式“
${{variables.var1 }}
”将替换为实际值“android_google_preprod_account_activation_url
”。因此,表达式“$(${{variables.var1 }})
”将更改为“$(android_google_preprod_account_activation_url)
”。 - 然后在运行时,表达式将被解析为正确的值“
preprod.google.com
”。
下面是我自己测试过的示例。
YAML
variables:
android_google_preprod_account_activation_url: 'preprod.google.com'
var1: 'android_google_preprod_account_activation_url'
jobs:
- job: A
displayName: 'Job A'
pool:
vmImage: ubuntu-latest
steps:
- checkout: none
- task: Bash@3
displayName: 'Print variables'
inputs:
targetType: inline
script: |
echo "android_google_preprod_account_activation_url = $(android_google_preprod_account_activation_url)"
echo "var1 = $(var1)"
echo "original value = $(${{ variables.var1 }})"
结果
更多详情可以引用相关文档“Understand variable syntax”。
关于bash - 无法获取 azure 管道中变量内的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74958796/