Spring Boot: Jenkins удаляет экранированный символ двойной кавычки из команд - PullRequest
0 голосов
/ 22 марта 2020

Я выполняю задания в Jenkins для своего проекта Spring Boot, и недавно я столкнулся с проблемой, когда Jenkins удаляет двойные кавычки из команд, которые он должен выполнять. Не имеет значения, находится ли оно внутри задания Gradle или конвейера, удаленные двойные кавычки удаляются. Пример:

Задание Gradle:

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

Локально работает нормально, однако на Jenkins происходит сбой с ошибкой: fatal: ambiguous аргумент '(backend)': неизвестная ревизия или путь не в рабочем дереве.

Конвейер 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

Кто-нибудь знает, как это обойти? Спасибо!

1 Ответ

0 голосов
/ 23 марта 2020

Мне не удалось заставить Дженкинса взять двойные кавычки. Я нашел это руководство по экранированию символов в Jenkinsfile:

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

однако, даже если команда, кажется, имеет двойные кавычки, она все равно не работает, как если бы она их не было.

Я закончил тем, что записал команду в файл и запустил ее от Дженкинса так:

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"
...