Jenkins一键分布式部署springboot项目
2019-05-13 本文已影响287人
Jerry_Liang
一、安装与启动
可参考我的上一篇关于jenkins的博客:https://www.jianshu.com/p/cfdf0d90185e
二、插件准备
1.maven项目插件
- 查看系统管理-->插件管理-->已安装插件中,过滤框中输入
Maven Integration plugin
,搜索是否已安装Maven Integration plugin插件; - 若未安装,则可到
系统管理-->插件管理-->可选插件
中,过滤框中输入Maven Integration plugin,勾选中后点直接安装。
2.节点管理插件
- 操作步骤同上,该插件名为
Publish Over SSH
。
三、配置系统设置
1.配置全局工具
- 在
系统管理-->全局工具配置
中,配置Maven、Git、Gradle或Docker等全局工具; -
这一步按需配置(本次例子只需要Maven),这里以配置Maven为例,如下图;
maven配置
- 由于我虚拟机上并没有安装maven,所以我选择使用的是自动安装。
2.系统设置
-
jenkins Location:URL为我们虚拟机的ip地址加jenkins启动时开放的端口号(如下图);
jenkins location
- SSH Server管理(如下图):若需要多台,点新增再添加即可。需要注意的是,如果没有配置免密登录的话,需要点击高级,勾选
Use password authentication, or use a different key
,并在Passphrase/Password
这一栏中输入虚拟机远程登录密码。
ssh server配置
3.新建maven项目

4.设置
-
设置项目的构建策略与仓库地址
General
-
源码管理设置
源码管理
-
其中Credentials添加如下:输入仓库用户名和密码,描述是为了区分该验证是什么(jenkins会保存一系列我们使用的credentials)可写可不写,推荐写
credentials设置
-
构建触发器
构建触发器
-
build与post steps设置,这里并没有跳过测试,所以会在构建的时候进行测试
build
-
若不知道pom.xml在哪,可以先执行一次构建,构建会把代码克隆下来,我们可以在工作空间中看到,如下图所示
工作空间
- 构建后操作中选择
Send build artifacts Over SSH
,因为我们在第2步系统设置中将SSH server远程工作目录为/usr/local
,此处又将路径设置为jenkins-jar/
,由此最终将jar包传输到服务器中的路径是/usr/local/jenkins-jar
选择构建后操作
设置构建后操作
- 上一步中的
Exec command
是我们要运行的执令,此处运行了我自己写的一个叫hello.sh
的启动脚本,同样,如果我们要一次部署到多台服务器上的话,只需要点击Add Transfer Set
再和上图一样设置另一台服务器即可; - 点击保存。
四、启动脚本编写
以上jenkins帮我们做了事情主要有如下几个:
- 从仓库中克隆代码;
- maven的
clean install
; - 当build成功后,将相应的文件传输到我们指定的服务器中(此处传输的是jar包);
- 定时重复上述步骤。
由此可见,jenkins并没有使我们项目启动起来,为此我们需要编写启动脚本。
脚本内容大致如下(欢迎指正-)
#!/bin/bash
function killproject()
{
#由于我这边多个项目jar包名一致了,所以并没有用 ps -ef | grep jar包名 来查进程id,而是通过端口号来查的
project_pid=$(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
if [ $project_pid > 0 ];then
echo "项目已经启动了,开始关闭项目,项目pid为: $project_pid "
kill -9 $(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
echo '项目关闭成功,开始重启项目。。。'
else
echo "项目未启动,直接启动"
fi
}
function start_project()
{
source /etc/profile
echo '正在启动项目。。。'
cd /usr/local/jenkins-jar/
nohup java -jar demo-0.0.1-SNAPSHOT.jar >warpper.log &2>1 &
}
function check_project()
{
check_pid=$(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
if [ $check_pid > 0 ];then
echo "project is start and pid = : $check_pid "
else
echo "project are not start"
fi
}
killproject
start_project
sleep 10
check_project
代码分析,其中:
- killproject()函数作用是查看系统中该项目是否已启动,若已启动,则先kill掉该进程,再启动;若未启动,则直接启动;
- start_project()函数作用是进入我的jar包存储路径,并后台运行,函数中的
source /etc/profile
目的是使项目可以后台启动(其实我没加的时候,后台启动项目一直不能用,报错找不到java环境); - check_project()函数作用是检查项目是否正常启动,可以在jenkins控制台中看到输出信息;
- sleep 10是为了等待我的springboot启动完,然后我们查看它的进程id.
五、构建项目
-
点击立即构建,就可以完成项目的自动部署了。
部分控制台输出
- 进入到虚拟机中,使用
netstat -lnp | grep 18099
可以验证项目是否已启动。 - 有时候可能会在控制台输出
project are not start
,我不是很清楚是否是我设置的睡眠时间短了(为此,我们初次测试可以去虚拟机中查看项目是否启动)。