当我在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中运行?
谢谢。 此致
答案 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
等。
我也会谨慎地将sudo
与Jenkins
运行结合使用,因为这可能最终会提示输入I / O.我建议在脚本上设置权限,以便运行Jenkins
时的使用可以简单地执行脚本。