为什么詹金斯认为这个构建步骤已经过去了?

时间:2013-11-25 12:52:56

标签: perl jenkins

#!/bin/sh
date;
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
date;

该脚本不存在,应该失败。

2 个答案:

答案 0 :(得分:4)

脚本的退出状态(0表示成功,其他一切都失败)是最后一个命令的退出状态。要修复,请在执行其他操作之前将正确的退出状态存储在shell变量中。例如:

#!/bin/sh
date
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
perlexitstatus=$?
date
exit $perlexitstatus

为了完整性,还有另外两种方式:

#!/bin/sh
set -e # exit on non-zero command exitcode
date
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
date

上面通常有点不方便,因为shell脚本通常都有你不关心的命令,并且不希望脚本失败。

#!/bin/sh
set -e # exit on non-zero command exitcode
date
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl ||
    { echo "aaaa... Script failed, spam monkey@company.com"; exit 1;}
date

如果愿意,最后一个也可以用 if-then-fi 语句编写。它提供了一种打印自定义错误消息的方法,以防失败命令的消息不清楚。

答案 1 :(得分:2)

如果你使用shell设置shebang,你可以提供-e参数来使内部命令失败的脚本中断:

#!/bin/sh -e
date;
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
date;