我使用以下命令可以正常工作
def before(Map<String, String> params) {
sh """
make ${params.get('arg')}
"""
}
现在我需要对其进行一些修改以与循环一起运行,并且出现复杂错误
def before(Map<String, String> params) {
sh """
params.each{ k, v -> make ${v} }
"""
}
任何想法如何解决这个问题?我尝试添加{
}
失败
您会看到一个编译错误,因为传递给sh
步骤的字符串的正文包含bash无法识别的部分(此部分:)params.each{ k, v -> make ${v} }
。
您可以从不同的角度解决此问题:您可以将所有映射条目收集到make ${arg}
命令列表中,并可以sh
在使用换行符加入所有命令之后将其传递给step \n
。考虑以下示例:
def before(Map<String, String> map) {
sh(map.collect { k,v -> "make ${v}" }.join("\n"))
}
before([arg1: "foo", arg2: "bar"])
在sh
步骤中执行的代码等效于以下内容:
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
,如上例所示)。但是,使用链接命令&&
可能会更好,因为如果其中之一失败,则会阻止下一个命令运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句