为什么我的Jenkins脚本会在while循环中挂起?

时间:2015-03-22 03:22:34

标签: bash infinite-loop

我正在运行Jenkins脚本来构建Jenkins程序并准备它的环境。 我发布了它挂起的脚本部分。它挂在while [[ "$ENDPOINT_STATUS" != 0 && (( $COUNTER < 5 )) ]]行。谁能告诉我这是什么问题?

##############
## wait until config wizard exits
while [ $($SSH pgrep -f /opt/company/grapevine/bin/grapevine_config_wizard | wc -l) -ne 0 ]
do
    echo "Config wizard still running. Sleeping..."
    sleep 30
done

$SSH chmod -v 755 /home/grapevine/.python-eggs || true
$SSH chown -vR grapevine:grapevine /home/grapevine/.python-eggs || true

source $WORKSPACE/tools/dev/quick-sanity/poormans-quick-sanity.sh "$CONTROLLER_IP"

set +e
run_basic_tests "$CONTROLLER_IP"
ENDPOINT_STATUS=$?
set -e
COUNTER=0

while [[ "$ENDPOINT_STATUS" != 0 && (( $COUNTER < 5 )) ]] 
do
    echo "At least one endpoint is not up. Sleeping..."
    sleep 60

    set +e
    run_basic_tests "$CONTROLLER_IP"
    ENDPOINT_STATUS=$?
    set -e

    (( COUNTER += 1 ))
done

if [ "$ENDPOINT_STATUS" -ne 0 ]
then
    echo "Hard fail Failing"
    exit 1
fi

if [ $($SSH service runonce status | grep ERROR | grep config_wizard | wc -l) -gt 0 ]
then
   echo "Config wizard failed with errors:"
   $SSH cat /var/log/runonce/config_wizard*.log
   exit 1
else
   echo "Config wizard succeeded"
   echo "Sleeping while Grapevine services start..."
   sleep 300
   exit 0
fi

2 个答案:

答案 0 :(得分:0)

比Jenkins更多的bash脚本问题。

您对终端有什么了解吗?您是否尝试过手动测试?也许会有一些事情发生在它没有迅速失败的地方,但是在无所事事的过程中留下了连接&#34;永远。

答案 1 :(得分:0)

我还在学习,但我注意到了一些事情。

  1. $内没有(()),例如((COUNTER++))FOO=$((COUNTER++))

  2. 测试或作业不需要双括号(()),只需要操作,例如FOO=$COUNTERif [[ $COUNTER -lt 5 ]]

  3. 在双括号内使用-a代替&& [[]]

  4. 对于算术运算,请在双括号-ne内使用!=代替[[]]。 (使用==!=表示字符串)

  5. e.g。 ...

    while [[ $ENDPOINT_STATUS -ne 0 ]] && [[ $COUNTER -lt 5 ]]
    

    或......

    while [[ $ENDPOINT_STATUS -a $COUNTER -lt 5 ]]
    

    Test Operators

    Arithmetic and String Comparison

    http://tldp.org/LDP/abs/html/testconstructs.html#EX10

    (第三个链接否认大声笑)