![](/img/trans.png)
[英]Build with declarative pipeline does not work Jenkins, but works with Scripted pipeline
[英]Jenkins groovy scripted pipeline variables not substituting correctly
我正在運行一個非常簡單的管道來創建 maven 項目,該管道是運行單個 maven 安裝命令。
麻煩在於將變量代入單行。 我嘗試了各種不同的東西,但被困在一個陌生的地方。 以下面的示例管道為例:
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 install 命令中的變量被替換,但這似乎不是這樣工作的。
此構建導致:
sh "mvn clean install -PrunInstallPackage -Duser=admin -Dpass=guessing -Dip=200.0.0.1 -Dport=4444 -Dhash=${GIT_HASH}
兩個 echo 命令都打印出正確的 output。
為什么在第一個變量替換后最后一個命令被切斷?
另外,由於某些未知原因,我無法將-Dbuildnumber=${env.BUILD_NUMBER}"
直接替換為 maven 命令。似乎用戶應該能夠做的事情。我在這里錯過了什么?
提前謝謝了
我試圖記住我過去是如何解決同樣問題的。
問題 1
您在兩個階段中使用GIT_HASH
變量,因此您必須將其聲明為全局以在它們之間共享它:
// Global variables declaration
GIT_HASH = null
// Pipeline code
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}"
}
}
問題 2
env.BUILD_NUMBER
是 Groovy 語句,而不是mvn
通過sh
命令在 shell 實例內執行。
出於這個原因,我建議您使用BUILD_NUM
變量方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.