提问人:DonnyFlaw 提问时间:11/10/2023 最后编辑:DonnyFlaw 更新时间:11/17/2023 访问量:49
自由式项目。如何遍历多值参数
Free-style Project. How to iterate over multiple-values parameter
问:
在我的自由式 Project Jenkins 工作中,我有一个名为“COMPONENETS”的参数,它接受一个或多个字符串除以空格。
如果我在 bash 脚本阶段使用这个作为单个字符串 () 传递的参数,我可以实现我需要的东西(将被处理):first
/path/to/first-*.tar.gz
<DO SOMETHING WITH> /path/to/${COMPONENTS}-*.tar.gz
但是当我尝试使用处理来更新我的作业时,例如,带有两个值()的字符串:first second
for COMPONENT in $(echo "${COMPONENTS}"); do
<DO SOMETHING WITH> /path/to/$COMPONENT-*.tar.gz
done
这不起作用,因为值似乎是空的 - 我遇到了错误
'/path/to/-*.tar.gz': No such file or directory
'/path/to/-*.tar.gz': No such file or directory
那么我应该如何正确地遍历 Jenkins 上的列表参数呢?
答:
0赞
JRichardsz
11/17/2023
#1
它有效
我尝试了您的代码,它按预期工作。逐个检查字符
echo "COMPONENTS: $COMPONENTS"
for COMPONENT in $(echo "${COMPONENTS}"); do
echo "/path/to/$COMPONENT-*.tar.gz"
done
构建参数
Jenkins版本:2.426.1
另一种选择
这也有效,而且更简单
for COMPONENT in ${COMPONENTS}; do
echo "/path/to/$COMPONENT-*.tar.gz"
done
结果
来源:https://stackoverflow.com/a/1469863/3957754
使用正则表达式
你可以用它来阐述复杂的拆分
echo $COMPONENTS | sed 's/ /\n/g' |
while read COMPONENT; do
echo "/path/to/$COMPONENT-*.tar.gz"
done
结果
来源:
槽的
如果您遇到问题,我建议使用脚本化管道,其中 groovy 可以执行任何您需要的事情:
String[] COMPONENTS = param.COMPONENTS.split("\\s");
for (String COMPONENT : COMPONENTS) {
sh "/path/to/$COMPONENT-*.tar.gz"
}
下一个:自由式项目。如何遍历多值参数
评论
$COMPONENTS
I have a parameter
你在哪里“有”这个参数?你在哪里设置变量?也毫无意义,只是.COMPONENTS
$(echo
$COMPONENTS
COMPONENTS
for COMPONENT in ${COMPONENTS}; do