我有一个脚本:
aws s3 rm "s3://my-bucket/" --recursive --dryrun --exclude "*" --include "my-folder/*"
我需要以某种方式在Jenkins管道中使用它,所以我试着这样做:
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和DeclarativeJenkins,因此无论您的管道是如何编写的,您都应该能够解决这个问题。
所以在你的情况下,这将是
sh '''aws s3 rm ${bucketNameRoute} --recursive --dryrun --exclude "*" --include ${folderNameRoute}'''
有关三引号字符串的详细信息:http://groovy-lang.org/syntax.html#_triple_single_quoted_string