繁体   English   中英

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

[英]Extracting shell script from parameterised Hudson job

我有一个参数化的Hudson作业 ,用于一些AWS部署工作,该工作在一个构建步骤中运行某些Shell命令。

但是,该脚本已经变得非常复杂,以至于我想将其从Hudson中“提取”到一个单独的脚本文件中,以便可以轻松地对其进行适当的版本控制。 然后,Hudson作业将仅从VCS更新并执行外部脚本文件。

我的主要问题是关于将参数传递给脚本。 我有一个名为AMI_ID的Hudson参数和其他一些参数。 脚本引用这些参数,就好像它们是环境变量一样:

echo "Using AMI $AMI_ID and type $TYPE"

现在,这在Hudson内部可以正常工作,但是如果Hudson调用外部脚本则不能。 我可以以某种方式让Hudson将参数设置为环境变量,这样我就不需要更改脚本了吗? 还是我最好的选择是更改脚本以采用命令行参数(并可能将其分配给命名变量以提高可读性: 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在脚本文件来运行它之前标准输出,但要么不是最优的。 实际上,我想用一种DOS风格的“ echo on ”作为我从哈德森(Hudson)调用的脚本-有人知道实现此目的的技巧吗?

不必执行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM