Jenkins Execute shell if then 语句因“Bad substitution”而失败

Jenkins Execute shell if then statement fails with `Bad substitution`

我需要在 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

注意:Configure System中有任何指定,所以它应该使用默认值Bash。

可能是什么问题?

我认为 =~[ ... ] 中不起作用——请改用 [[ ... ]]

Shellcheck is a great tool for find these types of things; it would show that you've hit SC2074.

回复:

fails on this line even this line is just a comment

你不能有一个“空的”then块。您可以只使用 : 作为要执行的代码:

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

下一个想法:将代码放入 shell 脚本中 运行,然后将代码放入 Jenkins。您可能需要模拟一些 Jenkins-supplied 输入来做到这一点,但它需要从等式中移除一个移动部分。如果命令行中的代码 运行s 而 Jenkins 中没有,那么你需要开始寻找 Jenkins-specific 原因,比如它可能在 csh 中是 运行 而不是 Bash(我看到你已经提到了这种特定的可能性,但也许还有其他类似的东西——我不认识 Jenkins,抱歉)。

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

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