前言
张三最近买了台云服务器没事整点小项目啥的,但是每次变更代码都需要以下几个步骤
- maven本地打包
- 将jar包上传到远程服务器
- 清理old版本的进程以及文件
- 手动运行java jar启动进程
如果代码频繁改动就要一直重复以上流程,有什么方案能免去这繁琐的步骤呢 没错! 我们可以使用Jenkins自动帮我们完成以上步骤
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
Jenkins配合webHook完成自动化构建
整体流程
服务器A完全可以和服务器B共用一台,省去jar包传输 (这里因为服务器B内存不够)
执行效果
Linux Jenkins安装
准备工作
- 安装 Maven 并设置
MAVEN_HOME = /usr/local/maven/apache-maven-3.6.1 - 安装 JDK
- 安装 docker
- /home 下创建
jenkins_home目录chomd 777 - docker安装jenkins
- docker启动jenkins
sudo docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home -v /usr/local/maven/apache-maven-3.6.1:/usr/local/maven/apache-maven-3.6.1 -v /etc/localtime:/etc/localtime --env JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m" jenkins/jenkins
Jenkins插件
- Maven Integration plugin
- Publish Over SSH
Publish Over SSH设置
maven项目配置
git仓库设置
构建触发器
构建前清理workspace
构建后处理
gitWebHook配置
post-step脚本(目标服务器)
kill之前的jar 并启动最新的jar
#!/bin/sh
name=$1
pid=`ps -ef|grep java|grep -v grep|grep "$name"|awk '{print $2}'`
if [ ! -n "$pid" ]
then
echo pid is blank
else
kill -9 "$pid"
echo kill "$pid"
fi
target=`ls|grep "$name"|grep .jar|sort -rn -k 1|head -1`
echo "$target"
`nohup java -jar "$target" > nohup.log 2>&1 &`