在Hudson Execute Shell步骤中误解了python脚本参数

时间:2014-05-30 02:52:29

标签: python linux shell jenkins hudson

当我在shell终端中运行我的python脚本时,它可以正常工作

sudo myscript.py --version=22 --base=252 --hosts="{'hostA':[1],'hostB':[22]}"

但是当我在Hudson和Jenkins中运行时,使用Execute Shell步骤,不知何故,字符串--hosts="{'hostA':[1],'hostB':[22]}"被解释为

sudo myscript.py --version=22 --base=252 '--hosts="{'hostA':[1],'hostB':[22]}"'

我们如何克服这个问题,以便我们的脚本可以在Jenkins和Hudson中运行?

谢谢。 此致

1 个答案:

答案 0 :(得分:0)

由于您直接使用引号以及Jenkins正在从生成的临时shell脚本中弹出这一事实,您似乎遇到了引用争用字符串类型的情况。

我发现使用Jenkins最好的办法是创建一个bash脚本来包装你想要运行的命令(你也可以让它做任何其他与环境相关的设置)希望拥有它,例如source source bash脚本来设置其他env变种。)

您可以让它接受可能与命令行不同的参数,这些参数可以从Jenkins配置传递给它。因此,任何插值都会在脚本中发生 - 您只是传递字符串。 (特别是,在这种情况下,您将主机 arg为"{'hostA':[1],'hostB':[22]}",它将传递给shell脚本,然后进行插值,并使用双引号重新包括在内。

所以,为此,假设你有一个运行如下命令的jenkins_run.sh脚本:

myscript.py --version=$VERSION --base=$BASE --hosts="$HOSTS"

变量作为参数传递并在之前分配(如果需要,可以直接使用$0$1等。

我也会谨慎地将sudoJenkins运行结合使用,因为这可能最终会提示输入I / O.我建议在脚本上设置权限,以便运行Jenkins时的使用可以简单地执行脚本。