Jenkins执行shell if-then语句失败,并带有"错误替换"



我需要Jenkins Execute Shell中的if语句,但无论有什么,它总是在同一行失败。我正试着做这样的事情:

if [ " ${BuildVariants[*]} " =~ " VariantA " ]; then
# fails on this line even this line is just a comment
variant_config=""
fi

当我尝试在那里分配一个变量时,它失败了,当我尝试echo "anything"时失败了,甚至在注释时也失败了(如上所述(

原因:Bad substitution

注意:在配置系统中有任何指定,所以它应该使用默认的Bash

可能是什么问题?

我不认为=~[ ... ]内部工作——请使用[[ ... ]]

Shellcheck是一个很好的工具,可以找到这些类型的东西;它将显示您已达到SC2074。

回复:

在这一行失败,即使这一行只是一个注释

您不能有一个"空";CCD_ 6块。您可以仅使用:作为要执行的代码:

if [[ "$foo" == "bar" ]]; then
:
fi

下一个想法是:让你的代码在shell脚本中运行,然后把代码放在Jenkins中。您可能需要模拟Jenkins提供的一些输入才能做到这一点,但这需要从等式中再提取一个移动部分。如果代码是从命令行运行的,而不是在Jenkins中,那么你需要开始寻找Jenkins特定的原因,比如它可能是在csh而不是Bash中运行的(我看到你已经提到了这种特定的可能性,但也许还有其他类似的事情——对不起,我不知道Jenkins(。

所以问题是我以为Jenkins给了我一个数组,但它给了我字符串。(我与扩展选择参数一起使用,有多种选择(。

所以条件应该是[[ "$BuildVariants" == *"VariantA"* ]]

最新更新