簡體   English   中英

Jenkins groovy 腳本化的管道變量未正確替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM