一 工程背景
本工程是一个springboot的项目,共有五个仓库,其中一个父工程,三个是依赖工程,一个是启动工程,每个工程还是父子pom,大致结构如下
FatherEngine 父工程,最顶级工程
Son1Engine 依赖工程
son1-base
son1-test
Son2Engine 依赖工程
son2-mail
son2-user
son2-security
Son3Engine 依赖工程
son3-pa
son3-sa
springbootRun 启动工程
二 Jenkins多任务部署插件
jenkins想要部署这样的工程项目,就没有办法采用传统的maven项目去部署,因为单独仓库的工程没有启动类,会报main class 找不到,所幸jenkins提供了一个插件,多模块部署,可以解决这种问题。
Multijob plugin
Multiple SCMs plugin
三 创建多任务
将上述插件安装成功以后便可以创建一个mutijob project任务
任务创建成功后,仍然按照部署一个springboot工程的正常思路,拉取git源码,maven打包,jar包启动
git源码管理
选择新插件 Mutiple ScMS, 选择git,然后输入git仓库的地址…
注意:因为是多仓库多pom工程,在配置了多个git地址的时候,如果按照以前的方式直接拉下来,会导致pom文件覆盖,所以我们需要为每个git仓库地址都新建一个文件夹来存放,就如同刚开始的工程目录结构一样,jenkins可以通过 check out to a sub-directory 实现,在当前任务空间下创建一个子目录
配置完一个之后,将其他仓库的git也按照同样的方式配置下来
maven构建
因为都是父子pom,所以我们构建的时候直接选择 构建最顶层maven目标,这里需要注意的是,因为我们的项目有多个,所以需要将每个仓库目录下的pom打包一次,这就需要指定特定目录的pom,jenkins也可以实现这一功能,在高级选项中可以指定pom的位置
多添加几个构建过程,分别指向不同目录下的pom将他们打包
maven打包成功后,便是执行shell脚本去启动项目
构建成功后还可以通过ssh 发送到目标服务器上
四 构建
保存后便可以直接构建。
shell脚本
echo "check $port"
grep_port=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }')
echo "grep port is $grep_port"
if [ -n "$grep_port" ]
then
echo "port $port is in use"
kill -9 "$grep_port"
else
echo "port is not in use"
fi
cd bootRun
nohup mvn clean install -DskipTests spring-boot:run -Dspring-boot.run.arguments="p.lifecycle=AUTO" > out 2>&1 &