rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • 部署

部署

jenkinsdockerelkzookeeper

pid方式

#!/usr/bin/env bash
#java -Xms1024M -Xmx8192M -jar 201803221105_41e5e3.jar

unset BUILD_ID

help(){
	echo " 参数: "
	echo " ./$0 start|stop|status|restart|dst|deploy|help"
	echo " -j jar包存放目录 /xxx/xxx"
	echo " -c config文件目录 /xxx/xxx"
	echo " -g 配置文件名称 application.config"
	echo " -d pid文件名称 application.pid"
	echo " -s jenkins打包出来的jar文件"
	echo " -m 目标机器 127.0.0.1"
	echo " -p 端口号port 8282"
	echo " -v 版本version 201804082112_afsd12"
	echo " -x 设置jar启动的最大堆内存"
	echo " -h 帮助文档"
}

########################################################

# 查看pid文件是否存在,存在说明服务在运行,不存在则说明服务停止了
checkPidFile() {

	echo ${pid_file}

	if [ -f ${pid_file} ];then
	   	echo "pid file is exist so is running"
	   	return 1
	else
        echo "pid file is not exist so is not running"
	    return 0
	fi
}

# start service..
start() {

	echo "start ....."
	
	checkPidFile 
	
	if [ $? -eq 1 ];then 
	   	
	   	echo $project is running...
	   	
	   	exit 2
	fi

  	cd ${jar_dir}

  	# 不让jenkins杀死此job执行的命令
    #BUILD_ID=dontKillMe 

	echo $PWD
	
	#`nohup java -Xmx8192M -jar $PWD/${version}.jar > nohup.out  2>&1 &`
	#`nohup java ${xmx} -jar $PWD/${version}.jar > nohup.out  2>&1 &`
	`nohup java ${xmx} -jar $PWD/${version}.jar > /dev/null 2> nohup.out &`

    echo $PWD
	
	progress_line=0
	
	count=0
	
	while(($progress_line == 0))
	
	do
	
		sleep 2;
	
		checkPidFile

	  	progress_line=$?
	
	  	count=$(($count+1))
	  	
	  	echo "第${count}次检查完毕"
	  	
	  	[ ${count} -eq 20 ] && echo start is fault .... && exit 3 
	done

	echo start is successful ....
}
# stop service...
stop() {
	
	echo "stop ....."
	
	checkPidFile
	
	if [ $? -eq 1 ];then
	   	
	   	# 获取进程ID
	   	echo `cat ${pid_file}`

	   	kill `cat ${pid_file}`
	fi

	progress_line=1
	
	count=0
	
	while(($progress_line != 0))
	
	do

	  	checkPidFile

	  	progress_line=$?

	  	sleep 2;
	  
	  	count=$(($count+1))
        echo "第${count}次检查完毕"
        [ ${count} -eq 20 ] && echo stop is fault .... && exit 3
	
	done
        
    echo "stop is successful ...."
}

# 分发用在jenkins服务器,往其它服务器拷贝jar包
distribute() {

    # 部署服务器创建项目目录
    ssh $machine "mkdir -pv ${jar_dir}"  

    # 分发jar包到部署服务器
    scp ${jenkins_jar_file} $machine:${jar_dir}/${version}.jar

    # 分发配置文件到部署服务器
    # scp ${config_file} $machine:${jar_dir}

    # $? 上个命令的退出状态,或函数的返回值
    if [ $? -eq 0 ];then
       	echo "distribute ${version} is successful...." 
    else
       	echo "distribute ${version} is fault...." 
       	exit 4;
    fi
}

# deploy project 
deploy(){

	jarfile=${jar_dir}/${version}.jar

	echo $jarfile

	if [ -f ${jarfile} ];then
	   	
	   	stop

		start

	else
        echo ${version}"版本文件不存在"
	    exit 2
	fi 
}

restart() {
	stop
	start
}

checkStatus(){
	checkPidFile
	if [ $? -eq 1 ];then
	echo "Running"
	else
	echo "not Running"
	fi
}

# 默认什么都不输入显示帮助
if [ $# -eq 0 ]; then
   help
   exit 1
fi

COMMAND=$1
shift
while getopts "j:c:g:d:s:m:p:v:x:h" opt
do
	echo "export param $opt, $OPTARG"
	
	case $opt in

	j) jar_dir=$OPTARG;;
	c) config_dir=$OPTARG;;
	g) config_file=$OPTARG;;
	d) pid_file=$OPTARG;;
	s) jenkins_jar_file=$OPTARG;;
	m) machine=$OPTARG;;
	p) port=$OPTARG;;
	v) version=$OPTARG;;
	x) xmx=$OPTARG;;
	h) help
	
	echo "export port $opt" ;;
	esac
done

if [ ${COMMAND} == start ]; then 
	start 
elif [ ${COMMAND} == status ];then
	checkStatus 
elif [ ${COMMAND} == stop ]; then
	stop
elif [ ${COMMAND} == restart ]; then
	stop
	start 
elif [ ${COMMAND} == dst ];then
	distribute 
elif [ ${COMMAND} == deploy ];then
	deploy
elif [ ${COMMAND} == "help" ];then
	help
elif [ ${COMMAND} == "h" ];then
	help
else
	help
fi

port方式

 #!/bin/bash
 #====================================
 # Name: deploy_auth.sh
 # Description: deploy auth
 # Author: pangguoping
 # Version:0.0.1
 # Datatime: 2015-06-25 15:56:38
 # Usage: deploy_hm.sh
 #====================================
 #define variable
 export JAVA_HOME=/home/hlvan/setup/jdk1.8.0
 export JRE_HOME=/home/hlvan/setup/jdk1.8.0/jre
 app_name="hm"
 
 tomcat_name="tomcat-hm"
 tomcat_dir="/jenkins/tomcat/${tomcat_name}"
 #run_command="app-server"
 project_dir="/jenkins/project/${app_name}"
 http_address=$(hostname)
 ##########################################################
 printHelp(){
    echo " Usage: "
    echo " ./$0 start|stop|status|restart|distribute|deploy "
    echo "   -p port  "
    echo "   -c  dev/conf the conf file to use"
    echo "   -v  version"
    echo "   -t ${app_name} / ${app_name}_ro"
    echo "   -b is bms.."
 }
 
 SUB_COMMAND=$1
 	shift
 	while getopts "p:c:v:t:f" opt
 	do
 	  echo "export param $opt, $OPTARG"
 	  case $opt in
 	  p)
 	     PORT=$OPTARG;;
 	  c)
 	     echo "export port $opt, $OPTARG"
 	     CONF_FILE=$OPTARG;;
 	  v)
 
 	     VERSION=$OPTARG;;
 	  t)
 	     TYPE=$OPTARG;;
           
       f)    
          FORCE=1;;
 
 	 \?) printHelp
 	     echo "export port $opt"
 	  esac
 	done
 
 # 参数处理
 if [ $# -eq 0 ]; then
    printHelp
    exit 1
 fi
 
 ########################################################
 port1=`echo ${PORT} | cut -d" " -f1`
 port2=`echo ${PORT} | cut -d" " -f2`
 port3=`echo ${PORT} | cut -d" " -f3`
 
 # target_dir /jenkins/project/hm/target
 target_dir="${project_dir}/target"
 pid_file="${project_dir}/${port1}.pid"
 
 version_dir="${project_dir}/${VERSION}"
 sourcefile="/jenkins/war/${app_name}/${VERSION}.war"
 
 ########################################################
 # mark last version
 mark() {
 	last_version=`ls -ld ${target_dir} | awk '{print $NF}'|awk -F'/' '{print $NF}'`
 	echo ${last_version} > "${project_dir}/${TYPE}.version"
 
 }
 
 # check run status
 isrunning() {
 	
 	progress_line=`netstat -lnutp|grep -c ":${port1}[[:space:]]"`
 	
 	if [ ${progress_line} -ge 1 ];then
 	   	echo $port is running...
 	   	return 0
 	else
         echo $port is not running...
 	    return 1
 	fi
 }
 
 # start service..
 start() {
 
 	echo "start ....."
 	
 	isrunning 
 	
 	if [ $? -eq 0 ];then 
 	   	
 	   	echo $port1 is running...
 	   	
 	   	exit 2
 	fi
 
 	# 不让jenkins杀死此job执行的命令
     BUILD_ID=dontKillMe 
 
     ${tomcat_dir}/bin/startup.sh 
 	
 	progress_line=0
 	
 	count=0
 	
 	while(($progress_line == 0))
 	
 	do
 	
 		sleep 2;
 	
 	  	progress_line=`netstat -lnutp|grep -c ":$port1[[:space:]]"`
 	
 	  	count=$(($count+1))
 	  	
 	  	echo $count
 	  	
 	  	[ ${count} -eq 20 ] && echo start is fault .... && exit 3 
 	done
 
 	echo start is successful ....
 }
 # stop service...
 stop() {
 	
 	echo "stop ....."
 	
 	isrunning
 	
 	if [ $? -eq 0 ];then
 	   	
 	   	# 获取进程ID
 	   	progress=`netstat -lnupt|grep ":$port1[[:space:]]"|awk -F "[ /]+" '{print $7}' `
 	   	echo "kill $progress"
 
 	   	# 不让jenkins杀死此job执行的命令
     	BUILD_ID=dontKillMe
 
         ${tomcat_dir}/bin/shutdown.sh
 	fi
 
 	progress_line=1
 	
 	count=0
 	
 	while(($progress_line != 0))
 	
 	do
 
 	  	progress_line=`netstat -lnutp|grep -c ":$port1[[:space:]]"`
 	  
 	  	sleep 2;
 	  
 	  	count=$(($count+1))
         echo $count
         [ ${count} -eq 20 ] && echo stop is fault .... && exit 3
 	
 	done
         echo "stop is successful ...."
 }
 
 # distribute code file
 distribute() {
         
     flag=${FORCE} 
     
     echo ${flag}
 
     # 判断 flag 这个变量是不是空字符串,如果不是返回真
     if [ ! -z $flag ];then
 	  
 		if [ $flag -eq 1 ];then 
 	     
 	    	stop
         
 	        if [ $? -eq 0 ];then
 	             
 		    	rm -rf ${version_dir}
 	            
 	        fi
 	  
 	  	fi
     
     fi  
 	
 	# check version_dir exist
 	if [ -d ${version_dir} ];then
 	   	echo ${version_dir} is exist ....
 	   	exit 3;
 	fi   
 
     # 解压war包 o 不必先询问用户,unzip执 行后覆盖原有文件 -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
     unzip -oq ${sourcefile} -d ${version_dir} 1>/dev/null
 
     # $? 上个命令的退出状态,或函数的返回值
     if [ $? -eq 0 ];then
        	echo "distribute ${VERSION} is successful...." 
     else
        	echo "distribute ${VERSION} is fault...." 
        	exit 4;
     fi
 }
 
 # deploy project 
 deploy(){
 
 # check version_dir exist
 	if [ ! -d ${version_dir} ];then
 	   echo ${version_dir} is not exist ....
 	   exit 3;
 	fi   
 
 	stop
 
 	mark
         echo "delete soft link...."
 	/bin/rm -rf ${target_dir}
         echo "create soft link...."
 	/bin/ln -s ${version_dir} ${target_dir}
 
 	start
 
 }
 restart() {
 	stop
 	start
 }
 checkStatus(){
 	isRunning
 	if [ $? -eq 0 ];then
 	echo "Running"
 	else
 	echo "not Running"
 	fi
 
 }
 
 if [ ${SUB_COMMAND} == start ]; then 
     start 
 elif [ ${SUB_COMMAND} == status ];then
    checkStatus 
 elif [ ${SUB_COMMAND} == stop ]; then
   stop
 elif [ ${SUB_COMMAND} == restart ]; then
   stop
   start 
 elif [ ${SUB_COMMAND} == dst ];then
    distribute 
 elif [ ${SUB_COMMAND} == deploy ];then
    deploy
 else
    printHelp
 fi
 
最近更新:: 2020/7/26 21:46
Contributors: luokaiwen