在Jenkins管道的Jenkins文件中的shell命令中使用参数

在Jenkins管道的Jenkins文件中的shell命令中使用参数,shell,jenkins,parameters,jenkins-pipeline,Shell,Jenkins,Parameters,Jenkins Pipeline,我想在几个shell命令中使用Jenkinsfile中定义的参数,但我得到一个例外。在我的示例中,我想执行一个简单的docker命令。该参数定义docker可执行文件的路径 这是我的非常简短的Jenkinsfile: pipeline { agent any parameters { string(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', na

我想在几个shell命令中使用
Jenkinsfile
中定义的参数,但我得到一个例外。在我的示例中,我想执行一个简单的docker命令。该参数定义docker可执行文件的路径

这是我的非常简短的
Jenkinsfile

pipeline {
  agent any

  parameters {
    string(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', name: 'docker')
  }

  stages {
    stage('Test') {
      steps {
        sh 'sudo ${params.docker} ps -a'
      }
    }
  }
}
我得到以下例外情况:

[e2e-web-tests_master-U4G4QJHPUACAEACYSISPVBCMQBR2LS5EZRVEKG47I2XHRI54NCCQ] Running shell script
/Users/Shared/Jenkins/Home/workspace/e2e-web-tests_master-U4G4QJHPUACAEACYSISPVBCMQBR2LS5EZRVEKG47I2XHRI54NCCQ@tmp/durable-e394f175/script.sh: line 2: ${params.docker}: bad substitution
当我更改
Jenkinsfile
而不使用shell命令中的参数时,它会成功传递:

pipeline {
  agent any

  parameters {
    string(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', name: 'docker')
  }

  stages {
    stage('Test') {
      steps {
        sh 'sudo /Applications/Docker.app/Contents/Resources/bin/docker ps -a'
      }
    }
  }
}

那么,如何在Jenkinsfile中的shell命令中使用参数呢?我尝试将
string
text
作为参数类型。

您遇到的问题是单引号是标准的java字符串

双引号是一个可模板化的字符串,如果已模板化,它将返回GString,否则将返回标准Java字符串

因此,如果您使用双引号:

  stages {
    stage('Test') {
      steps {
        sh "sudo ${params.docker} ps -a"
      }
    }
  }
然后params.docker将替换管道中“sh”脚本中的${params.docker}

如果您想将
放入
”sudo${params.docker}ps-a“
中,它不像bash那样工作(这让人困惑),您可以使用java风格的转义,因此
”sudo\“${params.docker}”ps-a“