您会看到一个编译错误,因为您传递给的字符串的正文
sh
步骤包含bash无法识别的部分(此部分:
params.each{ k, v -> make ${v} }
)
您可以从不同的角度来处理这个问题:您可以将所有映射条目收集到
make ${arg}
命令,您可以将其传递给
嘘
使用换行符联接所有命令后的步骤
\n
. 请考虑以下示例:
def before(Map<String, String> map) {
sh(map.collect { k,v -> "make ${v}" }.join("\n"))
}
before([arg1: "foo", arg2: "bar"])
在中执行的代码
嘘
步骤相当于以下内容:
sh """
make foo
make bar
"""
更新:在内部执行多个命令
"""
块
如果要应用前面在内部显示的解决方案
“”
阻止您可以尝试使用如下内容:
def before(Map<String, String> map) {
sh """
# Run any command beforehand
${map.collect { k,v -> "make ${v}" }.join(" && ")}
"""
}
这种方法允许您在执行一系列命令之前放置任何bash命令,比如
make foo && make bar && make 123
你可以用一个不同于
&&
(例如
\n
就像前面的例子)。但是,将命令链接到
&&
可能更好,因为如果其中一个失败,它将阻止下一个命令运行。