Używam pliku Jenkins w potoku w wersji 2.32.2.Jenkins potok rur nie wydaje się respektować potoku w komendzie powłoki
Z różnych powodów chcę wyodrębnić ciąg wersji z pom. Miałem nadzieję, że nie będę musiał dodawać wtyczki do pomocy programu i korzystać z funkcji oceny.
Szybko wymyśliłem małą ekspresję sed, aby wydobyć ją z pom, która używa rur i działa na linii poleceń w przestrzeni roboczej Jenkinsa na executorze.
$ sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g' 1.0.0-SNAPSHOT
To może być prawdopodobnie zoptymalizowane, ale chcę, aby zrozumieć, dlaczego gazociąg wydaje się być w przypadku braku na rurami sh poleceń. Grałem z różnymi formatami smyczkowymi i obecnie używam smyczkowego slashy.
Etap rurociąg wygląda następująco, aby umożliwić łatwy wyjściu ciąg poleceń:
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}"
}
Po uruchomieniu w rurociągu jenkins I uzyskać następujące dane wyjściowe konsoli, w którym wydaje się być oddzielenie rurami polecenia do oddzielne polecenia:
[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
Jakieś wskazówki dotyczące prawidłowego korzystania z poleceń wyprowadzonych w pliku jenkinsfile?
Nie ma już potrzeby robienia czegoś takiego. Zobacz moją odpowiedź za pomocą kroku 'readMavenPom'. – StephenKing
Świetnie! Wykorzystam to natychmiast. Dzięki – mattvbv