Jenkins一键分布式部署springboot项目

一、安装与启动

可参考我的上一篇关于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项目
构建maven项目
4.设置
  • 设置项目的构建策略与仓库地址


    General
  • 源码管理设置


    源码管理
  • 其中Credentials添加如下:输入仓库用户名和密码,描述是为了区分该验证是什么(jenkins会保存一系列我们使用的credentials)可写可不写,推荐写


    credentials设置
  • 构建触发器


    构建触发器
  • build与post steps设置,这里并没有跳过测试,所以会在构建的时候进行测试,若要跳过测试,可以在clean install 后加-DskipTests
    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,我不是很清楚是否是我设置的睡眠时间短了(为此,我们初次测试可以去虚拟机中查看项目是否启动)。

更新:sleep 10修改成 sleep 30s就好了,之前果然是睡眠时间太短了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容