发布Java代码的流程总结起来无非就是:

  1. 用Git获取代码
  2. 用maven编译代码
  3. 备份现有项目
  4. 终止现有进程
  5. 启动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来做自动发布,太重了,希望能帮助到大家,有问题请留言。