如何让 shell 脚本在 Jenkins 工作,包括引号和 *
How to make shell script work at Jenkins including quotes and *
我有一个脚本:
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 和声明式 Jenkins,因此无论您的管道如何编写,您都应该能够解决问题。
所以在你的情况下,这将是
sh '''aws s3 rm ${bucketNameRoute} --recursive --dryrun --exclude "*" --include ${folderNameRoute}'''
有关 triple-quoted 个字符串的更多信息:http://groovy-lang.org/syntax.html#_triple_single_quoted_string
我有一个脚本:
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 和声明式 Jenkins,因此无论您的管道如何编写,您都应该能够解决问题。
所以在你的情况下,这将是
sh '''aws s3 rm ${bucketNameRoute} --recursive --dryrun --exclude "*" --include ${folderNameRoute}'''
有关 triple-quoted 个字符串的更多信息:http://groovy-lang.org/syntax.html#_triple_single_quoted_string