变量在我的 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>"
我是 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>"