我正在运行一个非常简单的管道来创建maven项目,这个管道就是运行一个maven install命令。
麻烦的是将变量替换到一行程序中。我尝试了各种不同的方法,但都卡在了一个奇怪的地方。以下面的管道为例:
node {
stage('Set Vars') {
GIT_HASH = sh (script: "git log -n 1 --pretty=format:'%H'" , returnStdout: true)
echo "git hash is >>>>>>>> $GIT_HASH"
BUILD_NUM="${env.BUILD_NUMBER}"
echo "build no is >>>>>>>> ${BUILD_NUM}"
}
stage('Build Project') {
sh "mvn clean install -PrunInstallPackage -Duser=admin -Dpass=guessing -Dip=200.0.0.1 -Dport=4444 -Dhash=${GIT_HASH} -Dbuildnumber=${BUILD_NUM}"
}
}
我希望在mvn安装命令中看到替换的变量,但这似乎不是这样工作的。
此构建会导致:
sh "mvn clean install -PrunInstallPackage -Duser=admin -Dpass=guessing -Dip=200.0.0.1 -Dport=4444 -Dhash=${GIT_HASH}
两个echo命令都打印出正确的输出。
为什么最后一个命令在第一个变量替换后被切断?
另外,由于一些未知的原因,我不能直接将-Dbuildnumber=${env.BUILD_NUMBER}"
替换到maven命令中。看起来像是用户应该能够做的事情。我在这里遗漏了什么?
先谢谢你
1条答案
按热度按时间m3eecexj1#
我试着回忆我过去是如何解决同样的问题的。
问题1
您将在两个阶段中使用
GIT_HASH
变量,因此必须将其声明为全局变量,以便在这两个阶段中共享该变量:问题2
env.BUILD_NUMBER
是一个Groovy语句,而mvn
在shell示例中由sh
命令执行。为此我建议你使用
BUILD_NUM
的变量方式。