背景描述

从集团获取了两台服务器:一台是研发服务器,一台测试服务器。但是因为集团运营对访问上传下载进行了限流,所以每次我们研发服务器需要更新或者测试服务器需要更新时都需要上传很久的 包,并且不一定能够成功,所以我们这里想要通过脚本来进行解决。

原场景: 1.个人工作电脑编写代码,提交github(内网服务器上非研发服务器) 2.本地测试完成,与前端对接,调试,修复bug 3.本地打包成jar,上传到研发服务器 4.在研发环境上进行第一轮测试 5.如果研发上测试有问题,打回到本地测试,完成后更新研发环境(进行上传jar部署) 6.研发第一轮测试完成没有问题,部署测试环境,进行第二轮测试 7.如果第二轮测试有问题,则直接打回到本地测试 8.后续又是重复上面的流程,直到bug修完。

优化后: 1.个人工作电脑编写代码,提交研发服务器的github 2.本地测试完成,与前端对接,调试,修复bug 3.研发服务器上git命令拉取项目,mvn进行打包部署,发布到研发环境 4.测试完成后,直接scp到测试环境,重新部署测试服务器服务接口

备注: a.需要在研发服务器上安装github(也可从其他服务器拉取,但保证可以拉取到) b.需要在研发服务器上安装maven(用于编译打包使用) c.编写脚本进行git拉取最新代码,编译,打包,研发环境部署(包括停当前服务) d.编写脚本打包部署测试环境

优化过程

1.安装github

在研发服务器上安装github,将代码放到到研发服务器上,本地拉取进行开发。
这里不讲如何安装github,可自行Google。

2.安装maven

在研发服务器上安装maven,过程省略,能够在任何地方执行mvn命令后即可,
特别注意配置一下maven的jre.

3.编写研发环境服务部署脚本

#!/bin/sh

# 编译打包启动服务的脚本

DIR=$(cd `dirname $0`; pwd)

SERVICE_NAME=$(basename $DIR)

# JAR包全路径,请修改为实际路径
PATH_TO_JAR=${SERVICE_NAME}.jar

./service-java.sh stop

rm -rf ${SERVICE_NAME}.jar


API_JAR=/home/api/${SERVICE_NAME}

rm -rf ${API_JAR}/${SERVICE_NAME}-1.0-SNAPSHOT.jar


PID_PATH_NAME=`dirname ${PATH_TO_JAR}`/${SERVICE_NAME}.pid


SOURCE_CODE_PARENT_FOLDER=/home/source/smartvls/

TARGET_JAR_FOLDER=/home/source/smartvls/${SERVICE_NAME}/target/${SERVICE_NAME}-1.0-SNAPSHOT.jar

cd ${SOURCE_CODE_PARENT_FOLDER}

git pull -r

mvn clean install -pl ${SERVICE_NAME} -am

mv ${TARGET_JAR_FOLDER} ${API_JAR}/${SERVICE_NAME}.jar

cd  ${API_JAR}

./service-java.sh start

#研发服务器完成后,直接打包发到测试服务器相同目录下
ssh 172.X.X.181  "cd $API_JAR && ./service-java.sh stop && rm -rf ./${SERVICE_NAME}.jar && scp -r root@172.X.X.182:${API_JAR}/${SERVICE_NAME}.jar ./${SERVICE_NAME}.jar ; ./service-java.sh start ; exit"

备注:这里需要做研发与测试之间的免密ssh登录

这里会有一个问题,就是./service-jave.sh stop命令不能保证一定把服务停掉,如果出现没有启动成功,那么就需要重新kill掉服务,重启这个服务即可。