代码之家  ›  专栏  ›  技术社区  ›  Jonik

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

  •  1
  • Jonik  · 技术社区  · 16 年前

    我有一个 parameterised Hudson job 用于一些 AWS 部署工具,在一个构建步骤中运行某些shell命令。

    但是,这个脚本已经变得足够复杂,我想从Hudson中将它“提取”到一个单独的脚本文件中,这样就可以轻松地对其进行版本控制。然后,Hudson作业将简单地从VCS更新并执行外部脚本文件。

    我的 主要问题 是关于向脚本传递参数。我有一个叫哈德逊参数 AMI_ID 还有其他一些。脚本引用这些参数,就好像它们是环境变量:

    echo "Using AMI $AMI_ID and type $TYPE"
    

    现在,这在哈德逊内部很好地工作,但如果哈德逊调用外部脚本就不行了。我可以让哈德逊设置参数作为环境变量,这样我就不需要更改脚本了吗?或者是我修改脚本以获取命令行参数的最佳选择(并可能将这些参数分配给命名变量以提高可读性: 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,但这也不是最佳的。实际上,我想要一种DOS风格。” 回声在 “对于我从哈德逊打来的剧本,有人知道实现这一目标的诀窍吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Dennis Williamson    16 年前

    不必这么做 export var=$var -尝试只使用 export var . 然而,尝试:

    AMI_ID=$AMI_ID TYPE=$TYPE external-script.sh
    

    全部在一条线上。

    要回答第二个问题,请尝试使用 -x bash选项。在外部脚本中,将其添加到shebang中:

    #!/bin/bash -x
    

    或包围要跟踪的脚本部分:

    set -x
    do_stuff
    more_stuff
    set +x