如何逃避Jenkins参数化构建变量

vin*_*i_f 3 escaping jenkins

我使用Jenkins ver. 1.522并且我想传递一个带有空格和引号的长字符串作为参数化构建部分中的参数.该作业只运行python脚本.

我的问题是我找不到逃脱我的字符串的方法,以便jenkins将它正确地传递给脚本.

假设...

串: fixVersion in ("foo") AND issuetype in (Bug, Improvement) AND resolution = Fixed ORDER BY resolution ASC, assignee ASC, key DESC

变量名:bar

脚本名称:coco.py

当我在终端中运行脚本时,一切都很好: python coco.py --option 'fixVersion in ("foo") AND issuetype in (Bug, Improvement) AND resolution = Fixed ORDER BY resolution ASC, assignee ASC, key DESC'

当我使用参数化构建与jenkins运行相同的脚本并尝试转义变量,因此它最终被py脚本作为一个参数,它被jenkins奇怪地想象.

在我的jenkins工作中,我称之为脚本: python coco.py --option \'${BAR}\'

它最终成为:

python coco.py --option '"fixVersion' in '('\''foo'\'')' AND issuetype in '(Bug,' 'Improvement)' in '(Production,' 'Stage)' AND resolution = Fixed ORDER BY resolution ASC, assignee ASC, key 'DESC"'

我也试过\"${BAR}\",\"$BAR\",\'$BAR\'

它的正确方法是什么呢?

rac*_*sta 6

尝试

python coco.py --option "${BAR}"
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要围绕所有内容的单引号

python coco.py --option \'"${BAR}"\'
Run Code Online (Sandbox Code Playgroud)

在您列出的情况下,bash会将空格视为分隔符.在变量周围加上双引号将保留字符串中的空格.例

aString='foo bar'
for x in $aString; do echo $x; done
# foo
# bar
for x in "$aString"; do echo $x; done
# foo bar
Run Code Online (Sandbox Code Playgroud)