发布Java代码的流程总结起来无非就是:
- 用Git获取代码
- 用maven编译代码
- 备份现有项目
- 终止现有进程
- 启动java进程
所有根据这个思路,我们可以一步一步来写shell,我们以要发布test.jar,并将代码获取到/data/service/test目录为例
首先,我们先在linux上安装好git, maven, java 这个网上教程很多,不多赘述
直接看脚本:
#!/bin/sh
echo "1. 用Git获取代码"
cd /data/service/test
git pull
git status
if [ $?=="0" ] ; then
echo "test git success"
echo "2. 用maven编译代码"
mvn -B -f ./test/pom.xml clean package -pl core,common,test -am -Dmaven.test.skip=true
cd /data/service/publish/test
echo "3. 备份现有项目 4. 终止现有进程"
./stop.sh
sleep 2s
echo "移到正式目录下"
mv -f /data/service/test/target/test.jar /data/service/publish/test/test.jar
echo "5. 启动java进程"
./start.sh
sleep 3s
echo "test publish success."
else
echo "test git failed,exit."
fi
我们可以发现,不用Jenkins一样可以自动发布java,这个脚本适合小项目,小公司的发布。
补充解释:
mvn -B -f ./test/pom.xml clean package -pl core,common,test -am -Dmaven.test.skip=true
这句的意思是跳过单元测试,按顺序只打包core,common,test三个项目,core和common是test的依赖荐,说白了就是test的逻辑层与数据逻辑层。
start.sh的内容:
#!/bin/sh
nohup /usr/local/java/jdk1.8.0_191/bin/java -server -Dspring.profiles.active=prod -Dserver.address=127.0.0.1 -Dserver.port=9088 -Xms500m -Xmx500m -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -jar /data/service/publish/test/test.jar >>log/server.log 2>&1 &
java的启动参数可以自己添加或修改,我这只是例子
stop.sh的内容
#!/bin/sh
PID_PATH="test.pid"
psid=`cat $PID_PATH`
if [ -z $psid ]; then
echo "================================"
echo "error: server already stopped!"
echo "================================"
else
kill -9 $psid
echo "" > $PID_PATH
echo "================================"
echo "info: server stopped!"
echo "================================"
fi
备份就是一个cp命令,没写上,如何没有进程test.pid文件,可以用ps命令找到它:
pidlist=`ps -ef|grep test-1.0.0.jar|grep -v "grep"|awk '{print $2}'`
)
kill -9 $pidlist
当项目只是很轻时没必要用Jenkins来做自动发布,太重了,希望能帮助到大家,有问题请留言。