python脚本参数在Hudson执行Shell步骤中被误解



当我在shell终端中运行python脚本时,它工作了

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

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

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

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

谢谢。真诚的

由于直接使用引号和Jenkins从生成的临时shell脚本中脱壳,看起来您遇到了引号字符串类型的战斗。

我发现使用Jenkins最好的方法是创建一个bash脚本来包装您想要运行的命令(您也可以让它做任何其他与环境相关的设置,例如设置其他环境变量的配置bash脚本)。

您可以让它接受可能与命令行不同的参数,这些参数可以从Jenkins配置传递给它。任何插值都会在脚本中发生——你只是传递字符串。(特别地,在这种情况下,您将有hosts参数为"{'hostA':[1],'hostB':[22]}",它将被传递给shell脚本,然后插入,重新包含双引号。)因此,为此,假设您有一个jenkins_run.sh脚本,它运行如下命令:

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

其中变量作为参数传递并在此之前赋值(如果您愿意,您可以直接使用$0, $1等)。

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

最新更新