变量在我的 jenkinsfile 中没有得到解析

variable does not get resolved in my jenkinsfile

我是 jenkins/groovy 的新手,我目前面临以下问题...

我在 jenkinsfile 中定义了一个部署管道,它包括在 linux 下的两个不同环境 运行 上部署脚本。部署脚本 copy_files.sh 必须 运行 在特定用户下才能保留权限:

def my_dst = '/opt/scripts'
pipeline {
    agent { label '<a generic label>' }
    stages {
        stage('Deployment env1') {
            agent { label '<a specific label>' }
            steps {
                script {
                    echo 'Deploying scripts...'
                    sh '/bin/sudo su -c "${WORKSPACE}/copy_files.sh ${WORKSPACE} ${my_dst}" - <another user>'
                }
            }
        }
        stage('Deployment env2') {
            agent { label '<another specific label>' }
            steps {
                script {
                    echo 'Deploying scripts...'
                    sh '/bin/sudo su -c "${WORKSPACE}/copy_files.sh ${WORKSPACE} ${my_dst}" - <another user>'
                }
            }
        }
    } 
}

我定义了文件应该被复制为变量的目标路径(my_dst 在两个环境中相同)。虽然环境变量 $WORKSPACE 得到解析,但我的变量 my_dst 没有解析,导致 copy_files.sh 脚本由于缺少参数而中止... 如何正确引用我的命令以便解析我的变量? 运行带有硬编码目标路径的 ning sudo 命令 /opt/scripts 有效。

提前发送

所以你希望Groovy注入my_dst,但是WORKSPACE来自shell环境,所以你需要使用双引号(所以groovy 进行模板化),并在 WORKSPACE 中转义 $,因此 Groovy 不会对其进行模板化,而是按原样传递给 shell:

sh "/bin/sudo su -c \"${WORKSPACE}/copy_files.sh ${WORKSPACE} ${my_dst}\" - <another user>"