You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins传入参数字符串/数组并遍历执行Docker推送的报错问题

解决Jenkins中Shell脚本数组语法报错问题

问题原因

Jenkins默认使用/bin/sh(POSIX标准Shell)执行脚本,而你用的list=( $IMAGE )是Bash特有的数组定义语法,POSIX sh不支持该语法,因此报Syntax error: "(" unexpected。同时注意Shell变量区分大小写,你脚本里的小写$tag、$repo和参数定义的TAG、REPO不匹配,会导致变量取值为空,这也是潜在问题。

解决方案

方法1:强制使用Bash执行脚本

在Jenkins的Shell步骤开头添加#!/bin/bash,即可使用Bash的数组特性,同时修正变量大小写:

#!/bin/bash
list=( $IMAGE )
for n in ${list[@]}
do
docker tag $n:$TAG $REPO/$n:$TAG
docker push $REPO/$n:$TAG
done

方法2:无需数组,直接遍历字符串(兼容POSIX sh)

由于IMAGE是空格分隔的字符串,POSIX sh的for循环会自动按空格拆分内容,直接遍历即可,兼容性更强:

for n in $IMAGE
do
docker tag $n:$TAG $REPO/$n:$TAG
docker push $REPO/$n:$TAG
done

方法3:严谨拆分字符串(处理特殊场景)

如果镜像名可能包含空格(非常规场景),可以用read结合IFS拆分字符串为数组,同时用双引号包裹变量避免特殊字符解析问题:

#!/bin/bash
IFS=' ' read -r -a list <<< "$IMAGE"
for n in "${list[@]}"
do
docker tag "$n:$TAG" "$REPO/$n:$TAG"
docker push "$REPO/$n:$TAG"
done

内容的提问来源于stack exchange,提问作者JellyHands

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:22:33