我有parameterised Hudson job,用于某些AWS部署内容,在一个构建步骤中运行某些shell命令。
然而,该脚本变得非常复杂,我想将它从Hudson“提取”到一个单独的脚本文件,以便它可以很容易地正确版本化。然后,Hudson作业将从VCS更新并执行外部脚本文件。
我的主要问题是关于将参数传递给脚本的。我有一个名为AMI_ID
的Hudson参数和其他一些参数。该脚本引用这些参数,就像它们是环境变量一样:
echo "Using AMI $AMI_ID and type $TYPE"
现在,这在Hudson中运行良好,但是如果Hudson调用外部脚本则不行。我可以以某种方式让Hudson将params设置为环境变量,这样我就不需要更改脚本了吗?或者是我最好的选择来改变脚本以获取命令行参数(并且可能将这些参数分配给命名变量以便于阅读:ami_id=$1; type=$2; ...
)?
我试过这样的事情,但脚本没有正确替换值:
export AMI_ID=$AMI_ID
export TYPE=$TYPE
external-script.sh # this tries to use e.g. $AMI_ID
加分问题:当脚本在Hudson中时,“控制台输出”将包含已执行的命令及其输出。这对于构建出现问题时的调试非常有用!例如,这里以“+”开头的行是脚本的一部分,下面的行是其输出:
+ ec2-associate-address -K pk.pem -C cert.pem 77.125.116.139 -i i-aa3487fd
ADDRESS 77.125.116.139 i-aa3487fd
调用外部脚本时,Hudson输出只包含后一行,使调试更难。我可以在运行它之前将cat
脚本文件添加到stdout,但这也不是最佳的。实际上,对于我从Hudson打电话的脚本,我想要一种DOS风格的“回显” - 任何人都知道实现这个目的的技巧吗?
答案 0 :(得分:3)
没有必要export var=$var
- 尝试只使用export var
。但是,试试:
AMI_ID=$AMI_ID TYPE=$TYPE external-script.sh
全部在一条线上。
要回答第二个问题,请尝试使用Bash的-x
选项。在外部脚本中,将其添加到shebang:
#!/bin/bash -x
要跟踪的脚本的或环绕部分:
set -x
do_stuff
more_stuff
set +x