首先,linux下必须先装有项目构建工具maven,代码管理工具git/svn等等。
以本项目为例:
原理就是在服务器上有一个项目对应git服务器代码的应发布项目,用git来管理,每次本地代码更新,直接push到git服务器上,然后在服务器下进行pull,这样服务器上的代码就和git服务器上的预发布代码是一样的,然后利用maven来对服务器代码进行打包,再把jar包从项目路径下cpoy到预发布路径下,执行 java -classpath -jar *.jar ,这样一个自动部署就OK了。
每次执行update.sh 文件就行,是不是很简单。。。。
---------------------------------------------------------------------start-------------------------------------------------------------------------
一.首先建立三个文件夹分别是:
mvn:maven项目的仓库和maven安装包
peasant:放置项目的运行环境
peasant-update:放置预打包项目
注:放置项目的时候最好放置可更新项目。
例;svn git 等等,直接把项目push到服务器然后 打包命令拉取项目直接打包运行。
二:配置mavn环境变量,配置git/svn 当前以git为准
vim /etc/profile
配置好环境后刷新一下环境变量
source /etc/profile
查看环境变量是否配置好
mvn -version
如果出现权限不够执行
chmod a+x /usr/local/mvn/apache-maven-3.5.0/bin/mvn
配置好后,检查一下maven的setting.xml文件的仓库是不是你指定的地址(usr/local/mvn/mvn-repo),不然就下载到默认地址咯
安装git:
yum install git -y
不然打包的时候会报错。
打包时会出现
二:编写自动打包命令
1.自动打包名字
注:第二行注释的是因为项目会有私服地址情况下,因为私服仓库里面的代码会改变,这里需要删除jar包然后重新下载,若没有不需写这句话
私服仓库的jar最好放在仓库一个指定的文件夹下,那么删除时(rm -rf /usr/local/mvn/mvn-repo/sifu/*)直接删除对应的文件夹,而不需要删除整个仓库,第一次可能会有点慢,因为要去下载jar包,不知道直接把仓库搬到下面会不会快点,你们可以试下。
整体命令:
#删除maven仓库的加载jar包
#rm -rf /usr/local/mvn/mvn-repo/*
#进入git下载工程的目录
cd //usr/local/peasant-update/manage
#执行更新操作
git pull
#进入git下载工程的目录下载工程的service目录
cd //usr/local/peasant-update/manage
#执行打包脚本
mvn clean package -Dmaven.test.skip=true
#删除服务器部署工程的jar包
rm -rf /usr/local/peasant/*.jar
#把新打好的jar包copy到工程的下
cp /usr/local/peasant-update/target/peasant.jar /usr/local/peasant/
cd /usr/local/peasant/
./restart.sh
./restart.sh命令就是自动运行命令
2.自动运行命令
执行jar包命令
#!/bin/sh
SERVER_PORT=20986
APP_PATH=`pwd`
FILE=
KILL_FLAG="1"
if [ -f "$FILE" ]; then
TP_ID=`cat tpid`
if [ $TP_ID ] ;then
LIVE_TPID=`ps -ef|grep $TP_ID|grep -v grep|grep -v kill|awk '{print $2}'`
if [ $LIVE_TPID ] && [ "$TP_ID" == "$LIVE_TPID" ] ;then
echo "$TP_ID Stop Process..."
kill -15 $TP_ID
sleep 3
LIVE_TPID=`ps -ef|grep $TP_ID|grep -v grep|grep -v kill|awk '{print $2}'`
if [ $LIVE_TPID ] && [ "$TP_ID" == "$LIVE_TPID" ] ; then
echo 'Kill Process!'
kill -9 $TP_ID
else
echo '$TP_ID Stop Success!'
KILL_FLAG=""
fi
fi
fi
fi
rm -f tpid
if [ $KILL_FLAG ] ;then
LIVE_TPID=`ps -ef|grep $APP_PATH|grep -v grep|grep -v kill|awk '{print $2}'`
if [ $LIVE_TPID ] ;then
echo "$LIVE_TPID Stop Process..."
kill -15 $LIVE_TPID
sleep 3
LIVE_TPID=`ps -ef|grep $APP_PATH|grep -v grep|grep -v kill|awk '{print $2}'`
if [ $LIVE_TPID ] ; then
echo 'Kill Process!'
kill -9 $LIVE_TPID
else
echo '$LIVE_TPID Stop Success!'
fi
fi
fi
#JAVA_OPTS=" -server -Xms2g -Xmx2g -Xss256k -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS=" -server -Xms512m -Xmx512m -Xss256k -Dapp.server.path=$APP_PATH -Ddubbo.protocol.port=$SERVER_PORT -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70"
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9082,server=y,suspend=n "
fi
# nohup java -jar myapp.jar --spring.config.location=application.yml > /dev/null 2>&1 &
nohup java $JAVA_OPTS $JAVA_DEBUG_OPTS -jar peasant.jar --server.port:80 > stdout.log 2>&1 &
echo $! > tpid
echo Start Success!
tail -f stdout.log
注:此处的jar执行必须是你项目打包后的jar包名字,后面的端口可以不加,加了就指定端口运行
进入项目运行环境下
cd /usr/local/peasant
赋予sh执行权限
chmod 777 *.sh
执行命令
./update.sh
1.maven自动下载jar包
2.打包完成后可以看项目下是否会有一个项目jar包
3.maven打包后执行jar包
4.大功告成!success!!!!!
------------------------------------------------------------------------------------end----------------------------------------------------------------------