如何让 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