如何遍历GitLab CI中array类型的inputs输入?
GitLab CI数组类型Input遍历解决方案
你的问题出在两个关键点:
- 变量引用语法错误:
$[[ inputs.tags]]不是GitLab CI的正确变量引用方式,正确写法是${inputs.tags}。 - GitLab CI的array类型input不会自动转为bash数组,传递到shell时是以空格分隔的字符串形式存在的,需要手动转换为bash数组才能遍历。
正确配置示例
修改后的.gitlab-ci.yml如下:
spec: inputs: tags: type: array default: - "${CI_COMMIT_SHA}" - "latest" --- print-tags: image: alpine:latest stage: build script: | # 方法1:用readarray将空格分隔的字符串转为bash数组 readarray -t tags < <(printf '%s\n' "${inputs.tags}") for tag in "${tags[@]}" do echo "$tag" done
另一种可选方法(利用IFS分割)
如果环境不支持readarray(比如部分轻量shell环境),可以用IFS分割字符串生成数组:
print-tags: image: alpine:latest stage: build script: | # 方法2:通过IFS分割字符串为数组 IFS=' ' read -r -a tags <<< "${inputs.tags}" for tag in "${tags[@]}" do echo "$tag" done
补充说明
两种方法都能将GitLab CI的array input正确转为bash数组,实现遍历输出。如果你的数组元素包含空格,只需在定义input时用引号包裹元素,上述方法依然能正确识别分隔。
内容的提问来源于stack exchange,提问作者Popeye
相关产品推荐
相关产品推荐

