gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:00 25 4
gpt4 key购买 nike

当我在 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 中运行?

谢谢。此致

最佳答案

由于您直接使用引号以及 Jenkins 从生成的临时 shell 脚本中脱 shell ,您似乎遇到了引号之战类型的情况.

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

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

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

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

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

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

关于python 脚本参数在 Hudson Execute Shell 步骤中被误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23946288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com