Spring 引导:Jenkins 从命令中删除转义的双引号字符

Spring Boot: Jenkins removes escaped double quote character from commands

我正在 运行为我的 Spring 启动项目在 Jenkins 上做作业,最近我遇到了一个问题,Jenkins 正在从它应该 [=41] 的命令中删除双引号=].不管它是在 Gradle 作业还是管道中,转义的双引号都将被删除。示例:

Gradle 工作:

proc = "git log --pretty=format:\"%cd - ${tag} (backend) - %s \" -${distance} --no-merges --date=short".execute()

在本地工作正常,但它在 Jenkins 上失败并出现错误:fatal: ambiguous argument '(backend)': unknown revision or path not in the working tree.

詹金斯管道:

sh "git log --pretty=format:\"%cd - ${tag} (backend) - %s \" -${distance} --no-merges --date=short"

语法错误而失败:“(” unexpected 这归结为与我通过此实验确定的相同:

sh "echo git log --pretty=format:\"%cd - ${tag} (backend) - %s \" -${distance} --no-merges --date=short"

这个 returns 没有转义双引号的命令:

git log --pretty=format:%cd - 2.0.4 (backend) - %s -8 --no-merges --date=short

有人知道如何解决这个问题吗?谢谢!

我无法强制 Jenkins 使用双引号。我在 Jenkinsfile 中找到了关于转义字符的指南:

https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4

然而,即使命令看起来有双引号,它仍然会失败,就好像没有双引号一样。

我最终将命令写入了一个文件,运行 它来自 Jenkins,如下所示:

def command = $/echo 'cd logs/backend/ && git log --pretty=format:"%cd - ${tag} (backend) - %s" -${distance} --no-merges --date=short > src/main/resources/changeLog.txt' > cmd/$
sh command
sh "./cmd"

您可能需要使用双反斜杠来转义引号:

\"