Я использую файл Jenkins в конвейере версии 2.32.2.
По разным причинам я хочу извлечь строку версии из pom. Я надеялся, что мне не придется добавлять плагин поддержки maven и использовать оценку.
Я быстро придумал небольшое выражение sed, чтобы вытащить его из pom, который использует трубы и работает на командной строке в рабочем пространстве jenkins на исполнителе.
$ sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'
1.0.0-SNAPSHOT
Вероятно, он может быть оптимизирован, но я хочу понять, почему конвейер, кажется, терпит неудачу при использовании команд shed. Я играл с различными строковыми форматами, и в настоящее время я использую строку slashy в долларах.
Шаг конвейера выглядит следующим образом, чтобы обеспечить легкий вывод командной строки:
script {
def ver_script = $/sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'/$
echo "${ver_script}"
POM_VERSION = sh(script: "${ver_script}", returnStdout: true)
echo "${POM_VERSION}"
}
При запуске в конвейере jenkins я получаю следующий вывод консоли, где он, кажется, отделяет передаваемые команды в отдельные команды:
[Pipeline] script
[Pipeline] {
[Pipeline] echo
sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'
[Pipeline] sh
[FRA-198-versioned-artifacts-44SD6DBQOGOI54UEF7NYE4ECARE7RMF7VQYXDPBVFOHS5CMSTFLA] Running shell script
+ sed -n /<version>/,/<version/p pom.xml
+ head -1
+ sed s/[[:blank:]]*<\/*version>//g
sed: couldn't write 89 items to stdout: Broken pipe
[Pipeline] }
[Pipeline] // script
Есть ли какое-нибудь руководство по правильному использованию команд с каналами в файле jenkins?