为什么詹金斯的工作没有失败?

时间:2014-04-23 04:41:13

标签: shell jenkins

运行作业时,将执行脚本。它应该以代码2退出,但它以代码0退出。

在脚本中我有:

ssh User@$myHost ant start
if [ ! $? = 0 ] ; then
    echo "*** Failed to start the application." 
    exit 2
fi

我进入控制台:

*** Failed to start the application.
*** rm -rf /opt/hudson/node2/Appi/*
*** exit 0
Finished: SUCCESS

它没有退出代码2,因为它应该......但它回声“无法启动应用程序。”

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

嗯,首先,$? = 0是一个字符串比较。您应该使用$? -eq 0进行真正的算术比较。

其次,rm -rf来自哪里?它不在您提供的脚本中。是否有另一个执行Shell 构建步骤与该命令?

请粘贴整个脚本

基于这些假设,没有看到完整的脚本:

first_script.sh

# some stuff
# ...

# call second script, store exit code
./second_script.sh
retVal=$?

# Handle exit code of second script
if [ ! $retVal -eq 0 ]; then
    echo "** Second script failed, so I am failing too with same code"
    exit $retVal
fi

# some more stuff
# ...
rm -rf /opt/hudson/node2/Appi/*
exit 0

second_script.sh

ssh User@$myHost ant start
if [ ! $? -eq 0 ] ; then
    echo "*** Failed to start the application." 
    exit 2
fi

答案 1 :(得分:0)

您没有提供完整的脚本代码,因此无法猜测您在做什么, 但是你可以实施一个解决方案。

管理一个包含退出值值的变量,并在脚本末尾写入exit $VAR,以便返回退出值。

示例:

RET_VAL=0 # Default return value is 0

ssh User@$myHost ant start
if [[ $? -ne 0 ]] ; then # Your script is not correct here.
    echo "*** Failed to start the application." 
    RET_VAL=2
fi

....
# Execute whatever you want and manage value of RET_VAL according to results.
...
return $RET_VAL # This must be last statement of your jenkins configuration script.

请更正脚本中的错误,如@Slav的回答中所述。