![](/img/trans.png)
[英]Jenkins pipeline : using variable created in shell 1, in shell 2
[英]Using parameters within a shell command in Jenkinsfile for Jenkins pipeline
我想在多个 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
当我在不使用 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
作为参数类型。
您遇到的问题是单引号是标准的 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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.