我如何防止jenkins单引用参数化值

时间:2015-02-01 06:18:17

标签: jenkins

我有字符串参数param1.If我尝试使用param1 = [a]和使用$ param1来构建作业,jenkins添加单引号,如'param1 = [a]'。如何摆脱单引号?< / p>

2 个答案:

答案 0 :(得分:2)

这与Jenkins有很强的关系 。问题在于,您希望将变量的值有效地放在shell中引用变量的位置,而bash只是不起作用。某些字符在命令行(仅)上具有特殊含义,除非转义,例如";(将同一行上的各个命令分开)。

在shell构建步骤中运行env时,您会看到双引号实际上是变量值的一部分。所以Jenkins做的一切都正确 - 它将参数逐字传递到shell构建步骤,作为环境变量。

单引号由shell 在回显有效命令时添加,因此您可以复制它并在将其粘贴到shell时获得相同的行为。

这里可能的解决方案是使用eval - 它的行为就像参数写在命令行上并执行它们一样。当然这可能很危险如果您允许不完全信任的用户为此Jenkins作业提供参数。

$ VAR="you fool ; pwd"
$ echo $VAR
you fool ; pwd
$ eval echo $VAR
you fool
/Users/danielbeck

答案 1 :(得分:0)

如果您正在使用Jenkins的sh构建步骤&#39; groovy /管道上下文,你只需要变量替换而不是通过bash环境传递变量,你可以做的是在将命令传递给sh .toString()之前强制替换。例如:

sh("some command ${param1}".toString())