我正在 Jenkins 上为我的 Spring Boot 项目运行作业,最近我遇到了一个问题,Jenkins 正在从它应该运行的命令中删除双引号。无论它是在 Gradle 作业还是 Pipeline 中,转义的双引号都将被删除。示例:
Gradle 作业:
proc = "git log --pretty=format:\"%cd - ${tag} (backend) - %s \" -${distance} --no-merges --date=short".execute()
在本地工作正常,但在 Jenkins 上失败并出现错误:致命:不明确的参数“(后端)”:未知修订版或路径不在工作树中。
Jenkins 管道:
sh "git log --pretty=format:\"%cd - ${tag} (backend) - %s \" -${distance} --no-merges --date=short"
因语法错误而失败:“(”意外,归根结底与我通过此实验确定的结果相同:
sh "echo git log --pretty=format:\"%cd - ${tag} (backend) - %s \" -${distance} --no-merges --date=short"
这将返回不带转义双引号的命令:
git log --pretty=format:%cd - 2.0.4(后端)-%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"
关于java - Spring 启动: Jenkins removes escaped double quote character from commands,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60804125/