у меня есть скрипт:
aws s3 rm "s3://my-bucket/" --recursive --dryrun --exclude "*" --include "my-folder/*"
мне нужно как-то использовать его в конвейере Дженкинса, поэтому я пытался сделать это так:
def bucketNameRoute = 's3://my-bucket/'
def folderNameRoute = 'my-folder/*'
sh "aws s3 rm ${bucketNameRoute} --recursive --dryrun --exclude "*" --include ${folderNameRoute}"
и получаю ошибку:
hudson.remoting.proxyexception groovy.lang.missingmethodexception no signature of method: java.lang.String.multiply() is aplicable for argument types:
(org.codehause.groovy.runtime.GStringImpl) values: [--include myfolder/*]
Как можно решить этот вопрос? Спасибо
На практике я всегда оборачиваю любые команды '''
У вас могут быть другие кавычки, такие как ""
внутри, и вы можете сделать так, чтобы команды занимали несколько строк. Также обратите внимание, что это применимо для bash, пакетной обработки, PowerShell или любых других команд, которые вам нужно запускать таким образом. Этот стиль цитирования также применим для Groovy и декларативного Jenkins, поэтому вы сможете решить проблему независимо от того, как написан ваш конвейер.
Так что в вашем случае это будет
sh '''aws s3 rm ${bucketNameRoute} --recursive --dryrun --exclude "*" --include ${folderNameRoute}'''
Подробнее о строках в тройных кавычках: http://groovy-lang.org/syntax.html#_triple_single_quoted_string
Использовать тройные кавычки Groovy?
"""awk … --exclude "*" …"""