Jenkins Pipeline脚本sh命令中的变量值

时间:2019-02-19 05:35:33

标签: shell if-statement jenkins jenkins-pipeline

我正在尝试编写Jenkins脚本,但无法解析一个命令。有一条RV[2].searchsorted(r[:,2],sorter=np.argsort(RV[2])) 语句,用于检查是否存在远程目录,如果该目录可用,它将为该目录提供权限,否则将返回失败。问题在于,目录路径的一部分是使用变量派生的,并且该变量被引用为if。我面临的问题是,该变量要么作为一个完整的字符串出现,要么在if命令中得到一个空值。当我们使用$variable_name检查外部值时,它将返回正确的值。 以下是我的一段代码:

echo

控制台输出为

def myversion ="${params.VersionName}"
pipeline {
  agent { label 'example' }
    stages {
      stage('Testing Stage') {
         steps {
            script { 
                sh "echo '${myversion}'"
                sh '''if sshpass -p remote_user_password ssh remote_user_name@remote_user_address '[ -d "some_path_here-${myversion}/Mac" ]'; then 
sshpass -p remote_user_password ssh remote_user_name@remote_user_address "echo remote_user_password | sudo -S chmod -R 777 some_path_here-${myversion}/Mac"
else
    echo "failure"
fi'''
                  }
                }
             }
          }
      }

从控制台输出中,我可以看到echo test test [Pipeline] sh + sshpass -p remote_user_password ssh remote_user_name@remote_user_address [ -d "some_path_here-${myversion}/Mac" ] + echo failure failure 的原样而不是传递的参数“ test ” 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

将单个配额更改为外部sh命令的两倍:

def myversion ="${params.VersionName}"
pipeline {
  agent { label 'example' }
    stages {
      stage('Testing Stage') {
         steps {
            script { 
                sh "echo '${myversion}'"
                sh """if sshpass -p remote_user_password ssh remote_user_name@remote_user_address '[ -d "some_path_here-${myversion}/Mac" ]'; then 
sshpass -p remote_user_password ssh remote_user_name@remote_user_address "echo remote_user_password | sudo -S chmod -R 777 some_path_here-${myversion}/Mac"
else
    echo "failure"
fi"""
                  }
                }
             }
          }
      }

答案 1 :(得分:0)

最后,在进行了许多不同的调整尝试之后,在此处找到了解决方案: 尽管Jenkins Pipeline语法生成器能够生成Jenkins脚本,但它可能并不总是有用。在这种情况下,我必须使用双引号而不是单引号,并修改内部的-d命令。最后是一个工作代码:

def myversion ="${params.VersionName}"
pipeline {
  agent { label 'example' }
    stages {
      stage('Testing Stage') {
         steps {
            script { 
                sh "echo '${myversion}'"
                sh """if sshpass -p remote_user_password ssh remote_user_name@remote_user_address '[ -d some_path_here-${myversion}/Mac ]'; then 
sshpass -p remote_user_password ssh remote_user_name@remote_user_address 'echo remote_user_password | sudo -S chmod -R 777 some_path_here-${myversion}/Mac'
else
    echo 'failure'
fi"""
                  }
                }
             }
          }
      }