Jenkins一键分散式部署springboot专案
外挂准备
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专案
构建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,我不是很清楚是否是我设定的睡眠时间短了(为此,我们初次测试可以去虚拟机器中检视专案是否启动)。
