在jenkinsfile的sh命令中使用$ {variable}

时间:2019-03-15 13:12:33

标签: maven jenkins escaping jenkins-pipeline sh

我正在尝试在Jenkinsfile中使用此maven命令

mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec

我将此命令放在jenkinsfile中的变量中,以便以后以这种方式使用

def myCommand = 'mvn -q -Dexec.executable=echo -Dexec.args=\"${project.version}\" --non-recursive exec:exec'

...

def version = sh(${myCommand})

我的问题是詹金斯没有正确地转义我的'$ {project.version}'并输出java.lang.NoSuchMethodError: No such DSL method '$' found among steps

如何在命令变量中正确包含'$ {project.version}'作为字符串?

2 个答案:

答案 0 :(得分:0)

groovy中的单引号存在问题-它不能替代变量。这应该起作用:

def myCommand = "mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec"

更多引号:What's the difference of strings within single or double quotes in groovy?

答案 1 :(得分:0)

只需将单引号替换为双引号:

nom::Err::Failure