v1
#!/bin/bash#项目名(文件夹名称需与jar名称保持一致)project_name=$1#指令(start,deploy ...)cmd=$2#启动环境(pro,dev,test ...)server_mode=$3#端口号server_port=$4base_dir=/home/workspace/projectsproject_dir=${base_dir}/${project_name}function deploy(){#更新代码(cd ${project_dir} && git checkout master && git pull && echo ">>>>>> git pull successful!") || exit 1#backupif [ ! -d "$base_dir/backup" ];thencd ${base_dir} && mkdir backup && echo ">>>>>> mkdir" ${base_dir}/backupficd ${project_dir} && cp -r ${project_dir} ${base_dir}/backup/${project_name}.bak.`date "+%F-%H%M%S"` && echo ">>>>>> backup cp project to ${base_dir}/backup/${project_name}.bak.`date "+%F-%H%M%S"` successful!"|| exit 1#build(cd ${project_dir} && gradle bootJar && echo ">>>>>> build successful!") || exit 1stop && start}function status(){if [ ! -z "`ps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'`" ];thenecho ">>>>>> ${project_name}.jar is running! pid:"`ps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'`""return 1elseecho ">>>>>> server was not running"return 0fi}function stop(){statusif [ $? -eq "1" ]; then#kill serverps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'|xargs kill -9 ;sleep 2echo ">>>>>> kill ${project_name}.jar successful!"fi}function start(){statusif [ $? -eq "1" ]; thenecho ">>>>>> The current service is started" && exit 1fi# 创建log目录if [ ! -d "/tmp/logs/$project_name" ];then(mkdir -p /tmp/logs/${project_name} && echo ">>>>>> mkdir /tmp/logs/${project_name} successful!") || exit 1ficd ${project_dir} || exit 1echo ">>>>>> cd ${project_dir}" && echo ">>>>>> now start server"if [ ! -f "build/libs/${project_name}.jar" ];thenecho ">>>>>> No executable jar will be compiled"(cd ${project_dir} && /Users/jiumeng/.gradle/gradle-4.5.1/bin/gradle bootJar && echo ">>>>>> build successful!") || exit 1fiecho ">>>>>> execute startup command: nohup java -server -Xmx2g -Xms2g -Xmn2g -Xss526k -jar build/libs/${project_name}.jar ${server_mode} ${server_port} > /dev/null 2>&1 &"nohup java -server -Xmx2g -Xms2g -Xmn2g -Xss526k -jar build/libs/${project_name}.jar ${server_mode} ${server_port} > /dev/null 2>&1 &#sleep 6s后再去检测进程(因为程序启动后可能报错停止运行)echo ">>>>>> checking startup results..."sleep 6if [ ! -z "`ps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'`" ];thenecho ">>>>>> ${project_name}.jar start successful! pid:$! deploy finished."elseecho ">>>>>> ${project_name}.jar was not running ,deploy failed!"fi}# 1.校验参数if [ $# -lt 2 ];thenecho ">>>>>> args check failed: should be two args, running like this: $0 server-message start" && exit 1fi# 2.设置启动环境及制定端口号if [ -z "$server_mode" ]; thenserver_mode=""elseserver_mode="--spring.profiles.active=$server_mode"fiif [ -z "$server_port" ]; thenserver_port=""elseserver_port="--server.port=$server_port"fi# 3.执行指定命令if [ ${cmd} == "deploy" ];thendeployelif [ ${cmd} == "status" ];thenstatuselif [ ${cmd} == "stop" ];thenstopelif [ ${cmd} == "start" ];thenstartelif [ ${cmd} == "restart" ];thenstopstartelseecho ">>>>>> args check failed: should be two args, running like this: $0 server-message start" && exit 1fi
ndsp线上服务部署脚本
#!/bin/bashif [ $1 != "frontend" -a $1 != "backend" ];thenecho "args check failed: \$1 must be frontend or backend" && exit 1fiif [ $# -ne 2 ];thenecho "args check failed: should be two args, running like this: $0 backend v1.0.1" && exit 1fiproject_name=$1tag_name=$2prepare_dir=/var/www/build-workspaceconfig_dir=$prepare_dir/conf-storeproject_clean_dir=$prepare_dir/ndsp-management-cleanfunction deploy_ndsp_mgmt_frontend(){(cd $project_clean_dir && git checkout master && git pull && git checkout $tag_name && echo git checout $tag_name successful! )|| (echo "git checkout failed" && exit 1)if [ -d "/var/www/ndsp-mgmt-frontend-$tag_name" ];thenmv /var/www/ndsp-mgmt-frontend-$tag_name /var/www/ndsp-mgmt-frontend-$tag_name.bak.`date "+%F-%H%M%S"`ficd $project_clean_dir && cp -r ndsp-management-frontend /var/www/ndsp-mgmt-frontend-$tag_name|| exit 1cd /var/www && cp -r $config_dir/mgmt-frontend/config.js /var/www/ndsp-mgmt-frontend-$tag_name/src/ || exit 1(cd /var/www/ndsp-mgmt-frontend-$tag_name/ && /opt/node-v8.11.2-linux-x64/bin/npm install && /opt/node-v8.11.2-linux-x64/bin/npm run build ) || (echo npm build failed && exit 1)cd /var/www && echo entering /var/www make soft link!if [ -L ndsp-mgmt-frontend ];thenunlink ndsp-mgmt-frontendfiln -s ndsp-mgmt-frontend-$tag_name ndsp-mgmt-frontend && echo make soft link done! build finished!}function deploy_ndsp_mgmt_backend(){(cd $project_clean_dir && git checkout master && git pull && git checkout $tag_name && echo git checout $tag_name successful!) || (echo git checkout failed && exit 1)if [ -d "/var/www/ndsp-mgmt-backend-$tag_name" ];thenmv /var/www/ndsp-mgmt-backend-$tag_name /var/www/ndsp-mgmt-backend-${tag_name}.bak.`date "+%F-%H%M%S"`fipwdcd $project_clean_dir && cp -r ndsp-management-backend /var/www/ndsp-mgmt-backend-$tag_name && echo cp to /vaw/www successful!|| exit 1cd /var/www && cp -r $config_dir/mgmt-backend/application-test.yml /var/www/ndsp-mgmt-backend-$tag_name/src/main/resources/ || exit 1cd /var/www && cp -r $config_dir/mgmt-backend/logback-spring.xml /var/www/ndsp-mgmt-backend-$tag_name/src/main/resources/ || exit 1(cd /var/www/ndsp-mgmt-backend-$tag_name/ && /opt/gradle/gradle-4.8/bin/gradle bootRepackage ) || (echo gradle build failed && exit 1)cd /var/www && echo entering /var/www make soft link!if [ -L ndsp-mgmt-backend ];thenunlink ndsp-mgmt-backendfiln -s ndsp-mgmt-backend-$tag_name ndsp-mgmt-backend && echo make soft link done!,buidl finished!cd /var/www/ndsp-mgmt-backend && echo now restart ndsp.jar ||(echo "softlink not exist!" && exit 1)ps -ef|grep ndsp.jar|grep -v grep |awk '{print $2}'|xargs kill -9 ;sleep 2nohup java -server -Xmx1536m -Xms1536m -Xmn1536m -Xss526k -jar build/libs/ndsp.jar --spring.profiles.active=test --server.port=8104 > /dev/null 2>&1 &if [ ! -z "`ps -ef|grep ndsp.jar|grep -v grep |awk '{print $2}'`" ];thenecho ndsp.jar restart successful! deploy finished.elseecho ndsp.jar was not running ,deploy failed! && exit 1fi}if [ $project_name == "frontend" ];thendeploy_ndsp_mgmt_frontendelif [ $project_name == "backend" ];thendeploy_ndsp_mgmt_backendfi
v2
1. env.sh
#!/bin/bash#项目名(文件夹名称需与jar名称保持一致)project_name=$1#指令(start,deploy ...)cmd=$2#启动环境(pro,dev,test ...)server_mode=$3#端口号server_port=$4branch=testbase_dir=/home/workspace/projectsproject_dir=${base_dir}/${project_name}# 3.执行指定命令if [[ ${project_name} == "ndsp-management" ]];thenproject_name="ndsp"if [[ ${cmd} == "build" ]];thenproject_dir="/home/workspace/projects/ndsp-management/ndsp-management-frontend"elseproject_dir="/home/workspace/projects/ndsp-management/ndsp-management-backend"fifi# 4.使用默认环境if [[ ${server_mode} == "" ]];thenserver_mode="test"fiecho project_name=${project_name} cmd=${cmd} server_mode=${server_mode} server_port=${server_port} branch=${branch}
2. deploy.sh
#!/bin/bash. `dirname $0`/env.shfunction deploy(){#更新代码(cd ${project_dir} && git checkout ${branch} && git pull && echo ">>>>>> git pull successful!") || exit 1#backup# if [ ! -d "$base_dir/backup" ];then# cd ${base_dir} && mkdir backup && echo ">>>>>> mkdir" ${base_dir}/backup# fi# cd ${project_dir} && cp -r ${project_dir} ${base_dir}/backup/${project_name}.bak.`date "+%F-%H%M%S"` && echo ">>>>>> backup cp project to ${base_dir}/backup/${project_name}.bak.`date "+%F-%H%M%S"` successful!"|| exit 1#build(cd ${project_dir} && gradle buildJar && echo ">>>>>> build successful!") || exit 1stop && start}function status(){if [ ! -z "`ps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'`" ];thenecho ">>>>>> ${project_name}.jar is running! pid:"`ps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'`""return 1elseecho ">>>>>> server was not running"return 0fi}function stop(){statusif [ $? -eq "1" ]; then#kill serverps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'|xargs kill -9 ;sleep 2echo ">>>>>> kill ${project_name}.jar successful!"fi}function start(){statusif [ $? -eq "1" ]; thenecho ">>>>>> The current service is started" && exit 1fi# 创建log目录if [ ! -d "/tmp/logs/$project_name" ];then(mkdir -p /tmp/logs/${project_name} && echo ">>>>>> mkdir /tmp/logs/${project_name} successful!") || exit 1ficd ${project_dir} || exit 1echo ">>>>>> cd ${project_dir}" && echo ">>>>>> now start server"if [ ! -f "build/libs/${project_name}.jar" ];thenecho ">>>>>> No executable jar will be compiled"(cd ${project_dir} && gradle buildJar --status && echo ">>>>>> build successful!") || exit 1fiecho ">>>>>> execute startup command: nohup java -jar build/libs/${project_name}.jar ${server_mode} ${server_port} > /dev/null 2>&1 &"#proxychains4nohup java -jar build/libs/${project_name}.jar ${server_mode} ${server_port} > /dev/null 2>&1 &#sleep 6s后再去检测进程(因为程序启动后可能报错停止运行)echo ">>>>>> checking startup results..."sleep 6if [ ! -z "`ps -ef|grep ${project_name}.jar|grep -v grep |awk '{print $2}'`" ];thenecho ">>>>>> ${project_name}.jar start successful! pid:$! deploy finished."elseecho ">>>>>> ${project_name}.jar was not running ,deploy failed!"fi}function build() {#更新代码(cd ${project_dir} && git checkout ${branch} && git pull && echo ">>>>>> git pull successful!") || exit 1#build(cd ${project_dir} && cnpm install && cnpm run build:test && echo ">>>>>> build successful!" && rm -rf bak && mv index bak && mv dist index)|| { rm -rf dist && mv bak index && echo "build error, go back to the previous version" && exit 1; }}# 1.校验参数if [ $# -lt 2 ];thenecho ">>>>>> args check failed: should be two args, running like this: $0 server-message start" && exit 1fi# 2.设置启动环境及制定端口号if [ -z "$server_mode" ]; thenserver_mode=""elseserver_mode="--spring.profiles.active=$server_mode"fiif [ -z "$server_port" ]; thenserver_port=""elseserver_port="--server.port=$server_port"fi# 3.执行指定命令if [ ${cmd} == "deploy" ];thendeployelif [ ${cmd} == "status" ];thenstatuselif [ ${cmd} == "stop" ];thenstopelif [ ${cmd} == "start" ];thenstartelif [ ${cmd} == "restart" ];thenstopstartelif [ ${cmd} == "build" ];thenbuildelseecho ">>>>>> args check failed: should be two args, running like this: $0 server-message start" && exit 1fi
