Go框架demo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

183 lines
6.2 KiB

#!/bin/sh
# reactive_service.sh
# This script for reactive this projects.
# @version 170327:3
# @author zhangxuhong <zhangxuhong@xitu.io>
#
# [config]
echo "-[config]-"
# ----------------------------[manual config here]------------------------------
REPO_SRC=$1
BUILD_TARGET=$2
DEPLOY_SRC=$3
DEPLOY_LOG_SRC=$4
RELEASE_ENV=$5
# ------------------------------------------------------------------------------
# program system service name for systemctl
SERVICE_NAME="${BUILD_TARGET}.service"
# final deploy src
FINAL_DEPLOY_SRC="${DEPLOY_SRC}/${BUILD_TARGET}"
# nginx config
NGINX_BIN_LOCATION="/data/apps/nginx/sbin/nginx"
NGINX_CONFIG_LOCATION="/data/apps/nginx/conf/vhost/"
# deploy target machine error handler config
DEPLOY_ERROR_SIGNAL_FILE="${FINAL_DEPLOY_SRC}/logs/deploy_error.s"
DEPLOY_SUCCESS_SIGNAL_FILE="${FINAL_DEPLOY_SRC}/logs/deploy_success.s"
DEPLOY_LOG="${FINAL_DEPLOY_SRC}/logs/deploy.log"
# print config
echo -e "\033[34mREPO_SRC set to: ${REPO_SRC}\033[0m"
echo -e "\033[34mBUILD_TARGET set to: ${BUILD_TARGET}\033[0m"
echo -e "\033[34mPROJECT WILL DEPLOY TO: ${FINAL_DEPLOY_SRC}\033[0m"
echo -e "\033[34mSERVICE_NAME set to: ${SERVICE_NAME}\033[0m"
echo ""
sleep 2
# [check input]
if [ "$RELEASE_ENV" == "dev" ]; then
echo "env ok";
elif [ "$RELEASE_ENV" == "beta" ]; then
echo "env ok";
elif [ "$RELEASE_ENV" == "online" ]; then
echo "env ok";
else
echo "please input an avaliable deploy environment [dev/beta/online]";
echo "example: ./deploy.sh beta";
exit 1;
fi
echo -e "\033[34mRELEASE_ENV set to: ${RELEASE_ENV} \033[0m"
echo ""
sleep 1
# configure log
if [ ! -d "${DEPLOY_LOG_SRC}/${BUILD_TARGET}" ]; then mkdir "${DEPLOY_LOG_SRC}/${BUILD_TARGET}"; fi
if [ ! -L "${FINAL_DEPLOY_SRC}/logs" ]; then ln -s "${DEPLOY_LOG_SRC}/${BUILD_TARGET}" "${FINAL_DEPLOY_SRC}/logs"; fi
# remove old deploy signal
if [ -f "${DEPLOY_ERROR_SIGNAL_FILE}" ]; then rm -f "${DEPLOY_ERROR_SIGNAL_FILE}"; fi
if [ -f "${DEPLOY_SUCCESS_SIGNAL_FILE}" ]; then rm -f "${DEPLOY_SUCCESS_SIGNAL_FILE}"; fi
# deploy start
echo "" | tee -a $DEPLOY_LOG;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "deploy start" | tee -a $DEPLOY_LOG;
# configure service
if [ ! -L "/etc/systemd/system/${SERVICE_NAME}" ]; then
cp "${FINAL_DEPLOY_SRC}/config/systemctl/${SERVICE_NAME}" "/etc/systemd/system/${SERVICE_NAME}";
else
rm -f "/etc/systemd/system/${SERVICE_NAME}";
cp "${FINAL_DEPLOY_SRC}/config/systemctl/${SERVICE_NAME}" "/etc/systemd/system/${SERVICE_NAME}";
fi
# configure nginx
PUBLIC_NGINX_CONF="${FINAL_DEPLOY_SRC}/config/nginx/${BUILD_TARGET}.public.conf"
PRIVATE_NGINX_CONF="${FINAL_DEPLOY_SRC}/config/nginx/${BUILD_TARGET}.private.conf"
if [ -f "${PUBLIC_NGINX_CONF}" ]; then
ln -s "${PUBLIC_NGINX_CONF}" $NGINX_CONFIG_LOCATION;
fi
if [ -f "${PRIVATE_NGINX_CONF}" ]; then
ln -s "${PRIVATE_NGINX_CONF}" $NGINX_CONFIG_LOCATION;
fi
# test nginx config
$NGINX_BIN_LOCATION -t 2> "${FINAL_DEPLOY_SRC}/logs/nginx_test.log";
isNginxOk=`grep 'test is successful' "${FINAL_DEPLOY_SRC}/logs/nginx_test.log" | wc -l `;
if [ "$isNginxOk" != "1" ]; then
touch $DEPLOY_ERROR_SIGNAL_FILE;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "[ERROR!] deploy error with nginx config error, nginx config error is : " | tee -a $DEPLOY_LOG;
cat "${FINAL_DEPLOY_SRC}/logs/nginx_test.log" | tee -a $DEPLOY_LOG;
exit 1;
else
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "nginx config is ok:" | tee -a $DEPLOY_LOG;
cat "${FINAL_DEPLOY_SRC}/logs/nginx_test.log" | tee -a $DEPLOY_LOG;
fi
# stop nginx
$NGINX_BIN_LOCATION -s stop
# check nginx is stoped
sleep 20;
nginxNum=`ps auxw | grep --color 'nginx' | grep -v grep | wc -l`
if [ "$nginxNum" != "0" ]; then
touch $DEPLOY_ERROR_SIGNAL_FILE;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "[ERROR!] deploy error with nginx stop failed, nginx process num is : ${nginxNum}" | tee -a $DEPLOY_LOG;
exit 1;
else
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "nginx stopped" | tee -a $DEPLOY_LOG;
fi
# restart service
/usr/bin/systemctl daemon-reload;
/usr/bin/systemctl enable ${SERVICE_NAME};
/usr/bin/systemctl stop ${BUILD_TARGET}; # use start-stop for first time deploy
/usr/bin/systemctl start ${BUILD_TARGET};
# check service
sleep 2;
/usr/bin/systemctl status "${BUILD_TARGET}" > "${FINAL_DEPLOY_SRC}/logs/service_status.log";
serviceStatus=`grep "Active: active" "${FINAL_DEPLOY_SRC}/logs/service_status.log" | wc -l`;
if [ "$serviceStatus" == "0" ]; then
touch $DEPLOY_ERROR_SIGNAL_FILE;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "[ERROR!] deploy error with service start failed, systemctl status :" | tee -a $DEPLOY_LOG;
cat "${FINAL_DEPLOY_SRC}/logs/service_status.log" | tee -a $DEPLOY_LOG;
# restart nginx
$NGINX_BIN_LOCATION;
# check nginx num
nginxNum=`ps auxw | grep --color 'nginx' | grep -v grep | wc -l`
sleep 5;
if [ "$nginxNum" == "0" ]; then
touch $DEPLOY_ERROR_SIGNAL_FILE;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "[ERROR!] deploy error with nginx start failed, nginx process num is : ${nginxNum}" | tee -a $DEPLOY_LOG;
exit 1;
else
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "nginx started" | tee -a $DEPLOY_LOG;
fi
exit 1;
else
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "service started" | tee -a $DEPLOY_LOG;
cat "${FINAL_DEPLOY_SRC}/logs/service_status.log" | tee -a $DEPLOY_LOG;
fi
# start nginx
$NGINX_BIN_LOCATION
# check nginx num
nginxNum=`ps auxw | grep --color 'nginx' | grep -v grep | wc -l`;
sleep 5;
if [ "$nginxNum" == "0" ]; then
touch $DEPLOY_ERROR_SIGNAL_FILE;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "[ERROR!] deploy error with nginx start failed, nginx process num is : ${nginxNum}" | tee -a $DEPLOY_LOG;
exit 1;
else
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "nginx started" | tee -a $DEPLOY_LOG;
fi
# deploy success
echo "success" > $DEPLOY_SUCCESS_SIGNAL_FILE;
echo -e "`date "+%Y-%m-%d %H:%M:%S"` \c" | tee -a $DEPLOY_LOG;
echo "[OK] deploy success." | tee -a $DEPLOY_LOG;
exit 0;