gpt4 book ai didi

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

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

我有一个 parameterised Hudson job , 用于一些 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 到stdout,但这也不是最佳选择。实际上,对于我从 Hudson 调用的脚本,我想要一种 DOS 风格的“echo on”——有人知道实现这个的技巧吗?

最佳答案

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

关于linux - 从参数化的 Hudson 作业中提取 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673782/

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