#docker #jenkins #groovy #jenkins-pipeline
#docker #дженкинс #groovy #дженкинс-конвейер
Вопрос:
Надеюсь, это простая проблема. У меня есть метод groovy, который я вызываю из файла Jenkins, который должен выполнять docker build
команду оболочки. Строка выглядит следующим образом:
sh "docker build --build-arg "VERSION=${tag}" -t "${project}:${tag}" ."
Однако, когда я запускаю это из Jenkins, кажется, что эта команда разбивается на новые строки, сбивая с толку docker:
17:26:05.151 docker build --build-arg "VERSION=<tag>
17:26:05.151 " -t "<project>:<tag>
17:26:05.151 " .
17:26:05.451 invalid argument "<project>:<tag>n" for "-t, --tag" flag: invalid reference format
17:26:05.451 See 'docker build --help'.
Двойные кавычки вокруг переменных были необходимы для получения полной команды в той или иной форме. Без них вывод отключается, вот так:
17:17:24.368 docker build --build-arg VERSION=<tag>
17:17:24.368 "docker build" requires exactly 1 argument.
Что-то определенно не так с тем, как я перевожу bash на groovy, но я не уверен, что.
Комментарии:
1. Кажется,
tag
переменная содержит новую строку.
Ответ №1:
Рассмотрим следующее:
def tag = "testing_tagn"
def project="test_proj"
node {
echo "docker build --build-arg "VERSION= "
tag
"" -t "${project}:"
tag "" ."
}
Даст вам именно то, что у вас есть:
docker build --build-arg "VERSION=tag
" -t "project:tag
" .
Вы можете избавиться от любых символов новой строки, используя .replace("n", "" )
def tag = "tagn"
def project="project"
node {
echo "docker build --build-arg "VERSION="
tag.replace("n", "" ).trim()
"" -t "${project}:"
tag.replace("n", "" ).trim() "" ."
}
Лучшим вариантом было бы заменить все символы новой строки:
echo "docker build --build-arg "VERSION=${tag}" -t "${project}:${tag}" .".replace("n", "" ).trim()
Теперь вам просто нужно заменить echo
на sh
def tag = "tagn"
def project="project"
node {
def command = "docker build --build-arg "VERSION=${tag}" -t "${project}:${tag}" .".replace("n", "" ).trim()
echo command
sh command
}
Этот пример заменяет каждый символ новой строки, независимо от того, является ли это переменной, исходящей от Дженкинса (в моем случае) или нет. Просто адаптируйте под свои нужды.