java - Spring 启动: Jenkins removes escaped double quote character from commands

标签 java jenkins gradle jenkins-pipeline gradlew

我正在 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/

相关文章:

json - 在 Jenkins Pipeline 上解析 JSON (groovy)

android - Gradle:如何仅为特定口味定义构建类型?

json - java.lang.NoSuchMethodError:没有这样的DSL方法 'readJSON'

android - 即使在 Release模式下构建,DEBUG 始终为真

gradle 压缩子项目分发文件的主要任务

java - 如何判断命令行参数是否包含流重定向

java - IntelliJ : Refactor package causes Guice class-not-found

java - 如何从方法的中间获取元素到 ArrayList

java - 如何使用JSoup通过发送特定日期来获取网页?

node.js - 使用 docker 时如何加快 CI 构建时间?