【发布时间】:2017-07-22 22:23:53
【问题描述】:
我在 2.32.2 版本的管道中使用 Jenkinsfile。
出于各种原因,我想从 pom.xml 中提取版本字符串。我希望我不必添加 Maven 帮助插件并使用评估。
我很快想出了一个小 sed 表达式,将它从 pom 中取出,它使用管道并在执行程序的 jenkins 工作区中的命令行上工作。
$ 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}"
}
当在 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
关于如何在 jenkinsfile 中正确使用管道命令的任何指导?
【问题讨论】:
标签: jenkins pipe jenkins-pipeline subshell