从参数化的Hudson作业中提取shell脚本

时间:2010-04-20 08:54:39

标签: linux bash hudson

我有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风格的“回显” - 任何人都知道实现这个目的的技巧吗?

1 个答案:

答案 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