jenkins 自由样式项目,如何覆盖多值参数

eqzww0vc  于 2023-11-17  发布在  Jenkins
关注(0)|答案(1)|浏览(134)

在我的自由风格的Project Jenkins工作中,我有一个名为“COMPONENETS”的参数,它接受一个或多个字符串除以空格。
x1c 0d1x的数据
如果我在bash脚本阶段使用这个参数作为单个字符串(first)传递,我可以实现我需要的(/path/to/first-*.tar.gz将被处理):

<DO SOMETHING WITH> /path/to/${COMPONENTS}-*.tar.gz

字符串
但是当我尝试使用处理来更新我的Job时,例如,具有两个值的字符串(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上遍历列表参数呢?

epggiuax

epggiuax1#

It works

我试了你的代码,它的工作原理如预期。检查字符的字符

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

如果你有问题,我建议你使用脚本管道,在其中使用groovy你可以做任何你需要的事情:

String[] COMPONENTS = param.COMPONENTS.split("\\s");
for (String COMPONENT : COMPONENTS) {
    sh "/path/to/$COMPONENT-*.tar.gz"
}

相关问题