在局域網內有一臺SVN服務器,同時又有一個項目部署的服務器時,不用每次從svn服務器或者是本地打jar再上傳到 項目部署服務器,可以用這一段shell腳本來代替那一段操作。步驟是先build到項目部署服務器,然後在restart啓動
1、build命令:app.sh build test
2、restart命令 app.sh restart test
1、build全部命令:app.sh build all
2、restart全部命令 app.sh restart all
#!/bin/bash
## Author LinkinStar
## UPDATE 2019-01-05
version="1.0.1";
svnRoot=/opt/svn/code
deployRoot=/opt/deploy
#所有需要編譯的項目名稱
all=(test)
#所有以springboot jar方式運行項目
allrun=(test)
#所有以war方式運行的項目
allwar=(test)
minmem=(test )
appName=$2
project=$appName
logFile=$deployRoot/logs/$project.log
if [ -z $appName ];then
appName=`ls -t |grep .jar$ |head -n1`
fi
if [[ $project == "all" || "${all[@]}" =~ $project || "${allrun[@]}" =~ $project || "${allwar[@]}" =~ $project ]]; then
echo $1 $2
else
echo "$project微服務名稱錯誤"
exit 1
fi
function build()
{
arr=($project)
if [ $project == "all" ];then
arr=(`echo ${all[*]}`)
fi
for str in ${arr[@]};do
echo "build" $str
deployPath=$deployRoot
svnPath=$svnRoot/$str
deployFile=$str.jar
logFile=$deployRoot/logs/$str.log
cd $svnPath
(
echo "$(date "+%Y%m%d %H:%M:%S") begin svn update"
ret=`svn cleanup >>$logFile 2>&1`
ret=`svn up >>$logFile 2>&1`
echo "$(date "+%Y%m%d %H:%M:%S") begin mvn update"
ret=`mvn clean install -DskipTests >>$logFile 2>&1`
echo "$(date "+%Y%m%d %H:%M:%S") copy to deploy path"
if [ $str == "qc-swagger-generator" ];then
echo "copy swagger"
ret=`rm -f $deployPath/qc-swagger*.jar >>$logFile 2>&1 `
ret=`cp qc-swagger-ui/target/qc-swagger-ui-exec.jar $deployPath/qc-swagger-ui.jar >>$logFile 2>&1`
#ret=`cp qc-swagger-tool/target/*.jar $deployPath >>$logFile 2>&1`
else
ret=`rm -f $deployPath/$deployFile >>$logFile 2>&1 `
ret=`cp target/$deployFile $deployPath >>$logFile 2>&1`
fi
#前端項目,需要複製前端代碼到/opt/deploy/
if [[ "${allwar[@]}" =~ $str ]]; then
ret=`rm -fr $deployPath/$str >>$logFile 2>&1 `
ret=`mkdir -p $deployPath/$str`
ret=`cp -r $svnPath/src/main/resources/static $deployPath/$str/ >>$logFile 2>&1`
ret=`cp -r $svnPath/src/main/resources/templates $deployPath/$str/ >>$logFile 2>&1`
fi
echo "$(date "+%Y%m%d %H:%M:%S") build finish"
)>>$logFile 2>&1
done
echo "$project build finish"
}
function splitlog(){
deployPath=$deployRoot
current_date=`date -d "-1 day" "+%Y%m%d"`
mkdir -p $logFile $deployRoot/logs/$current_date
for str in ${all[@]};do
logFile=$deployRoot/logs/$str.log
echo $logFile
split -b 100m -d -a 4 $logFile $deployRoot/logs/$current_date/$str.log.
cat /dev/null>$logFile
done
str="xxl-job-admin"
logFile="$deployRoot/logs/xxl-job-admin.log"
split -b 100m -d -a 4 $logFile $deployRoot/logs/$current_date/$str.log.
cat /dev/null>$logFile
}
function start()
{
arr=($project)
if [ $project == "all" ];then
arr=(`echo ${allrun[*]}`)
fi
for str in ${arr[@]};do
echo "start $str"
deployPath=$deployRoot
cd $deployPath
jar=$deployPath/$str.jar
#if [ $str == "qc-swagger-ui" ];then
# jar = $deployPath/$str-exec.jar
#fi
logFile=$deployRoot/logs/$str.log
count=`ps -ef |grep java|grep $jar|wc -l`
if [ $count != 0 ];then
echo "Maybe $str is running, please check it..."
else
echo "The $jar is starting..."
#nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx512M > /dev/null 2>&1 &
# if [[ "${allwar[@]}" =~ $str ]]; then
# nohup java -jar $jar --spring.profiles.active=test >> $logFile 2>&1 &
# else
# nohup java -jar $jar --spring.profiles.active=dev >> $logFile 2>&1 &
# fi
if [ $str == "emembership" ]; then
nohup java -Xms512m -Xmx1024m -jar $jar --spring.profiles.active=dev >> $logFile 2>&1 &
elif [[ "${minmem[@]}" =~ $str ]]; then
nohup java -Xms150m -Xmx150m -jar $jar --spring.profiles.active=dev >> $logFile 2>&1 &
else
nohup java -Xms512m -Xmx1024m -jar $jar --spring.profiles.active=dev >> $logFile 2>&1 &
fi
fi
done
echo "$project start finish"
}
function stop()
{
arr=($project)
if [ $project == "all" ];then
arr=(`echo ${allrun[*]}`)
fi
for str in ${arr[@]};do
echo "stop $str"
logFile=$deployRoot/logs/$str.log
deployPath=$deployRoot
jar=$deployPath/$str.jar
appId=`ps -ef |grep java|grep $jar|awk '{print $2}'`
if [ -z $appId ];then
echo "Maybe $str not running, please check it..."
else
echo "The $str is stopping..."
kill $appId
fi
done
echo "$project stop finish"
}
function restart()
{
# get release version
#releaseApp=`ls -t |grep .jar$ |head -n1`
# get last version
#lastVersionApp=`ls -t |grep .jar$ |head -n2 |tail -n1`
#appName=$lastVersionApp
stop
for i in {5..1}
do
echo -n "$i "
sleep 1
done
echo 0
#backup
#appName=$releaseApp
start
}
function backup()
{
# get backup version
backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`
# create backup dir
if [ ! -d "backup" ];then
mkdir backup
fi
# backup
for i in ${backupApp[@]}
do
echo "backup" $i
mv $i backup
done
}
function status()
{
deployPath=$deployRoot
jar=$deployPath/$appName.jar
appId=`ps -ef |grep java|grep $jar|awk '{print $2}'`
if [ -z $appId ]
then
echo -e "\033[31m Not running \033[0m"
else
echo -e "\033[32m Running [$appId] \033[0m"
fi
}
function usage()
{
echo "Usage: $0 {start|stop|restart|status|stop|build -f|splitlog}"
echo "Example: $0 start"
for str in ${all[@]};do
echo "build $str"
done
for str in ${allwar[@]};do
echo "build $str"
done
for str in ${allrun[@]};do
echo "restart $str"
done
for str in ${allwar[@]};do
echo "restart $str"
done
echo "build all"
echo "restart all"
echo "splitlog all"
exit 1
}
case $1 in
start)
start;;
build)
build;;
stop)
stop;;
restart)
restart;;
status)
status;;
splitlog)
splitlog;;
*)
usage;;
esac