Jenkins groovy脚本化管道变量未正确替换

imzjd6km  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(220)

我正在运行一个非常简单的管道来创建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命令中。看起来像是用户应该能够做的事情。我在这里遗漏了什么?
先谢谢你

m3eecexj

m3eecexj1#

我试着回忆我过去是如何解决同样的问题的。

问题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在shell示例中由sh命令执行。
为此我建议你使用BUILD_NUM的变量方式。

相关问题