最近项目中需要用到脚本打包自动部署,正好做一下笔记,备忘。
原来是maven项目放在eclipse中进行手动打包,现在为了节省时间且非开发人员也可以快速打包 将项目转移到了服务器上,整体步骤如下。
1.linux服务器上安装好git环境,创建一个git仓库。
2.安装maven环境以及java环境,前后端分离的情况,前端代码需要单独打包,需要装一个node环境
3.脚本思路
(1) 从git 仓库中更新代码
(2)使用mvn命令打包,前端使用npm
(3)将打好的jar包移动到运行环境中。前端打的包可不必移动,直接再nginx的配置文件中将访问路径直接指向git仓库中打好的文件夹路径
(4)将所有jar包重启
项目背景:
这是一个maven的聚合项目,所以我们在打包的时候要先将父项目和其他依赖的项目先打包,再打其他子项目的包。
//更新代码
git pll
前端打包(文件夹名字叫test,前端打包生成的是一个文件夹)
npm run build:test
//父项目 (注意,父项目打包必须使用Install,因为install是将包打到本地仓库供其他项目使用,package是打到target下面)
mvn install
//依次打好其他项目的jar包(该命令其实依次执行了compile,test,最后才是package)
mvn clean package
打完包之后,首先将运行环境中的Jar以重命名的方式备份一下。
再将打好的jar包移动到指定的运行环境里。
因为有一种情况下,两个服务器用一个脚本,但是有个项目只在一个服务器上,所以我们可以先进行判断一下再操作,防止报错。
定义全局变量:(注意 = 号两端不能有空格)
#git仓库绝对路径
service="/opt/code/ManageSystem/service"
#运行环境绝对路径
server="/opt/server"
if [ ! -d “${server}/old” ];then
echo “------old不存在-------”
else
cd ${server}/old
mv old-1.0-SNAPSHOT.jar old-1.0-SNAPSHOT-backup.jar
mv ${service}/old/target/old-1.0-SNAPSHOT.jar ${server}/old/old-1.0-SNAPSHOT.jar
echo “------old存在且----备份部署完成-------”
fi
部署完成之后就是重启了。
为了让运行的项目受我们掌控,我们要为项目建立一个app.pid文件来存储它运行时进程的Pid.然后通过kill命令来将这个命令干掉从而达到关闭的作用,重启的时候它又自动存储了新的进程pid
1.在项目下建立一个app.pid文件(app是名字,可随意取)
2.编写两个脚本,一个用来启动,一个用来关闭,也可只写一个里面,先写关闭命令,再写启动命令。(这里需要注意的是,当我们启动了一个进程后,再重新启动,pid的值会取第二次的值,但是实际上第二个启动的进程会因为重复启动直接挂掉,所以这样pid的值其实就不准确了,无法达到重启的效果)
直接上脚本
//关闭pid指向的进行
cd /opt/server/api
PID=$(cat app.pid)
kill -9 $PID
启动服务并将进程pid存入app.pid文件中,同时将打印的日志存入log文件夹下,以app.log命名(自动生成,不需要创建这个app.log文件)
cd /opt/server/api
nohup java -Xmx1024m -Xms1024m -Xmn256m -jar api-1.0-SNAPSHOT.jar >log/app.log &
echo $! > app.pid
然后最后调用这个两个脚本就可以辣~~~~~~over