Вы видите ошибку компиляции, потому что тело строки, которую вы передали шагу sh
, содержит часть, которая не распознается bash (эта часть: params.each{ k, v -> make ${v} }
).
Вы можете заняться этим с другой точки зрения: вы можете собрать все записи на карте в список make ${arg}
команд и передать их на шаг sh
после объединения всех команд с помощью символа новой строки \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
"""
Обновление: выполнение нескольких команд внутри """
block
Если вы хотите применить решение, показанное ранее внутри блока """
, вы можете попытаться использовать что-то вроде этого:
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
, как в предыдущем примере).Однако объединение команд с помощью &&
может быть лучше, потому что если одна из них завершится неудачно, это предотвратит выполнение следующих команд.