如何让shell脚本在Jenkins工作,包括引号和*



我有一个脚本:

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

相关内容

  • 没有找到相关文章

最新更新