我想在几个shell命令中使用Jenkinsfile
中定义的参数,但是我得到了一个例外。在我的例子中,我想执行一个简单的docker命令。该参数定义了docker executable的路径。
这是我非常简短的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
当我在shell命令中不使用参数的情况下更改Jenkinsfile
时,它成功传递:
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
作为参数类型。
答案 0 :(得分:10)
您遇到的问题是单引号是标准的java字符串。
双引号是一个可模板化的String,如果它是模板化的,它将返回一个GString,或者是一个标准的Java String。
所以你使用双引号:
stages {
stage('Test') {
steps {
sh "sudo ${params.docker} ps -a"
}
}
}
然后params.docker将替换管道中“sh”脚本中的$ {params.docker}。