Shell腳本的build和restart工程 寫法

在局域網內有一臺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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章