如何存储Shell For循环的执行结果并在Azure Pipelines命令中引用?
解决方案:将Azure Pipelines变量组变量批量迁移到新组
要实现从现有变量组获取变量值并批量创建到新变量组的需求,你可以通过关联数组存储键值对,再构建az pipelines variable-group variable create命令参数来完成。下面是具体的实现步骤:
步骤1:获取变量值并存储到关联数组
首先修改你的循环脚本,使用关联数组保存每个变量名和对应的取值,同时处理jq输出的引号问题(避免值带双引号):
# 定义需要迁移的变量列表 values="addressSearchBaseUrl addressSearchSubscriptionKey cacheUrl calendarApiUrl checkoutBffApiUrl cpCode" # 初始化关联数组,用于存储变量名和对应的值 declare -A var_values # 循环遍历变量列表,从目标变量组获取值 for ptr in $values do echo "正在获取变量 $ptr 的值..." # 使用jq的-r选项获取原始字符串(自动去掉双引号) temp=$(az pipelines variable-group list --group-name "${target_backend}" | jq -r '.[0].variables.'${ptr}'.value') # 检查命令执行是否成功 if [ $? -ne 0 ]; then echo "获取变量 $ptr 失败,终止脚本" exit 1 fi # 将变量名和值存入关联数组 var_values["$ptr"]="$temp" echo "成功获取变量 $ptr 的值" done
步骤2:批量创建变量到新组
有两种高效的方式可以将变量批量添加到新组:
方式一:逐个创建变量(适合需要单独处理每个变量的场景)
循环遍历关联数组,为每个变量单独执行创建命令:
# 遍历关联数组,逐个创建变量到新组 for var_name in "${!var_values[@]}" do az pipelines variable-group variable create \ --name "Sales.Configuration.Spa ${new_env}" \ --variable "$var_name" \ --value "${var_values[$var_name]}" \ --yes # 自动确认操作,避免交互提示 done
方式二:一次性批量创建(减少API调用次数,更高效)
构建完整的命令参数列表,一次性传递所有变量和值:
# 初始化命令参数数组 create_args=() create_args+=("--name" "Sales.Configuration.Spa ${new_env}") create_args+=("--yes") # 自动确认 # 遍历关联数组,添加所有变量和值到参数列表 for var_name in "${!var_values[@]}" do create_args+=("--variable" "$var_name") create_args+=("--value" "${var_values[$var_name]}") done # 执行批量创建命令 az pipelines variable-group variable create "${create_args[@]}"
注意事项
- 如果目标新变量组
"Sales.Configuration.Spa ${new_env}"还不存在,需要先执行创建组的命令:az pipelines variable-group create \ --name "Sales.Configuration.Spa ${new_env}" \ --description "存储${new_env}环境的SPA配置变量" - 确保你有足够的Azure Pipelines权限(变量组的读取和写入权限)。
- 如果变量值包含特殊字符(如空格、引号),关联数组会自动处理,无需额外转义。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

