我在版本2.32.2的管道中使用Jenkinsfile。Jenkins管道sh似乎並不尊重shell命令中的管道
由於各種原因,我想從pom中提取版本字符串。我希望我不必添加maven幫助插件並使用評估。
我很快想出了一個sed表達式,讓它從使用管道並在執行器上的jenkins工作區中的命令行上工作的pom中解脫出來。
$ sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g' 1.0.0-SNAPSHOT
這也許可以優化,但我想知道爲什麼管道似乎對管道的sh命令失敗。我玩過各種字符串格式,目前使用的是美元斜槓字符串。
管道一步看起來像下面允許的命令字符串的方便輸出:
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}"
}
當詹金斯管道得到以下控制檯輸出它似乎被分離管道命令進入運行單獨的命令:
[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
有關如何正確使用jenkinsfile中的管道命令的任何指導?
有沒有必要再做這樣的事情。使用'readMavenPom'步驟查看我的答案。 – StephenKing
太棒了!我會立即使用它。謝謝 – mattvbv