Azure Pipeline变量组变量在Bash脚本中未初始化,求解决方法
从Azure Pipeline变量组读取变量并修复Nexus IQ应用创建脚本
一、Azure Pipeline配置步骤
首先在你的Pipeline YAML文件中,先引用存储了USERCODE、PASSCODE、ORGANIZATIONID的变量组,同时可以将NEWAPP设为流水线参数:
# 引用变量组 variables: - group: NexusIQ-Variables # 替换为你的变量组实际名称 # 定义NEWAPP参数(也可将其加入变量组) parameters: - name: NEWAPP type: string required: true
二、修改后的Bash脚本
移除原脚本的位置参数,直接读取Azure注入的环境变量,同时修复脚本中的逻辑错误:
#!/bin/bash # 直接从Azure Pipeline环境变量中读取值 USERCODE=$USERCODE PASSCODE=$PASSCODE ORGANIZATIONID=$ORGANIZATIONID NEWAPP=${{ parameters.NEWAPP }} # 若NEWAPP在变量组中,直接用$NEWAPP即可 # 检查必填值是否为空 if [ -z "$USERCODE" ] || [ -z "$PASSCODE" ] || [ -z "$ORGANIZATIONID" ] || [ -z "$NEWAPP" ]; then echo 'USERCODE, PASSCODE, ORGANIZATIONID, NEWAPP 不能为空。' exit 1 fi # 分页获取所有应用名称 count=1 uri="https://nexusiq.xxxxxx.com/api/v2/applications" applications="[]" # 初始化空JSON数组 while : ; do raw=$(curl -u "${USERCODE}:${PASSCODE}" "${uri}?per_page=100&page=${count}") # 检查当前页是否有数据 page_length=$(echo "$raw" | jq -r '.|length') if [ "$page_length" -eq 0 ]; then break fi # 提取当前页的应用名称数组并合并到总列表 page_apps=$(echo "$raw" | jq '[.[].name]') applications=$(echo "$applications" "$page_apps" | jq -s '.[0] + .[1]') ((count++)) done # 检查目标应用是否已存在,不存在则创建 if ! echo "$applications" | jq -e --arg app "$NEWAPP" '.index($app) >= 0' >/dev/null; then # 用jq构造标准JSON,避免手动拼接的语法问题 JSON=$(jq -n \ --arg org "$ORGANIZATIONID" \ --arg pubid "$NEWAPP" \ --arg name "$NEWAPP" \ '{organizationId: $org, publicId: $pubid, name: $name}') # 执行创建请求(修复了原脚本中-X前缺少空格的错误) curl -u "${USERCODE}:${PASSCODE}" -X POST -H "Content-Type: application/json" "$uri" -d "$JSON" fi
三、关键修改说明
- 移除位置参数,直接使用Azure自动注入的环境变量(变量组中的变量会自动转为bash环境变量)
- 修复原脚本中
applicaions的拼写错误 - 优化分页逻辑,先判断当前页数据长度再处理,避免空数据导致的jq解析错误
- 使用jq的
index方法可靠检查应用是否存在,原脚本将JSON数组当作bash数组处理的逻辑错误 - 用jq构造JSON,避免手动拼接字符串引发的语法问题
- 修复curl命令中
-X前缺少空格的认证错误
内容的提问来源于stack exchange,提问作者Gslacker
相关产品推荐
相关产品推荐

