我正在运行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
答案 0 :(得分:0)
比Jenkins更多的bash脚本问题。
您对终端有什么了解吗?您是否尝试过手动测试?也许会有一些事情发生在它没有迅速失败的地方,但是在无所事事的过程中留下了连接&#34;永远。
答案 1 :(得分:0)
我还在学习,但我注意到了一些事情。
$
内没有(())
,例如((COUNTER++))
或FOO=$((COUNTER++))
测试或作业不需要双括号(())
,只需要操作,例如FOO=$COUNTER
或if [[ $COUNTER -lt 5 ]]
在双括号内使用-a
代替&&
[[]]
对于算术运算,请在双括号-ne
内使用!=
代替[[]]
。 (使用==
,!=
表示字符串)
e.g。 ...
while [[ $ENDPOINT_STATUS -ne 0 ]] && [[ $COUNTER -lt 5 ]]
或......
while [[ $ENDPOINT_STATUS -a $COUNTER -lt 5 ]]
Arithmetic and String Comparison
http://tldp.org/LDP/abs/html/testconstructs.html#EX10
(第三个链接否认大声笑)