• 中文
    • English
  • 注册
  • 查看作者
  • 使用Jenkins自动化部署SpringBoot项目

    一.  前言

    《Jenkins的简介、安装、配置》一文中,我们简单介绍了Jenkins的作用和功能,并在服务器中安装部署了Jenkins,接下来,我们将通过一个实战项目,用Jenkins自动化部署一个SpringBoot项目,流程如下:

    通过IDEA提交到本地Git仓库并Push到GitHub或者Gitee后,Jenkins将会自动帮我们结束之前的项目进程,并自动从GitHub或者Gitee中拉取最新的项目部署到指定服务器上。

    也就是说,之前需要我们手动用Maven打包、上传到服务器、杀掉之前的进程、启动现在的项目等这一系列操作全部交由Jenkins自动完成,我们需要做的就是将要部署的代码提交到GitHub或者Gitee,只要提交成功,Jenkins就会帮我们自动部署。

    二.  全局工具配置

    1. 我们点击左侧菜单中的的系统管理 —> 全局配置

    使用Jenkins自动化部署SpringBoot项目

    2. 由于JDK我们已经提前安装了,所以这里取消自动安装,直接输入jdk的路径,

    使用Jenkins自动化部署SpringBoot项目

    3. 同理,我们也可以先安装好Git后,再直接输入git的安装路径(如果忘记了git的安装路径,可以用which git 命令查询),如下图:

    使用Jenkins自动化部署SpringBoot项目

    4. 除此之外,如果我们还没有安装相关软件,也可以选择让Jenkins自动安装,以Maven为例,如下图

    使用Jenkins自动化部署SpringBoot项目

    5. 当然,如果在这之前,你的服务器已经安装了Maven和Git,也可以直接取消自动安装,输入安装路径即可,除此之外,我们还需要安装Maven插件,点击左侧菜单栏中的系统管理-> 插件管理,选择可选插件,搜索maven,选择 Maven Integration plugin,点击直接安装即可。

    使用Jenkins自动化部署SpringBoot项目

    6. 用同样的方法分别安装GitHub Authentication、Git plugin、Gitee插件(可以自由选择安装,安装后配置Gitee更方便),由于在国内还是Gitee更稳定一些,所以接下来的讲解会以Gitee为例。

    7. 打开左侧菜单中的系统管理 -> 系统设置 ,找到Gitee一栏,输入以下信息:

    链接名:Gitee

    Gitee 域名 URL:https://gitee.com

    Gitee 域名完整URL地址:类型选择Gitee API 令牌,在登录码云情况下,在该浏览器上打开https://gitee.com/profile/personal_access_tokens,新增令牌[1]

    使用Jenkins自动化部署SpringBoot项目

    三.  新建任务

    1. 点击左侧的新建任务按钮,输入任务名称,点击确定

    使用Jenkins自动化部署SpringBoot项目

    2. 输入该任务的简介,也可以直接空着进行下一步,在Gitee链接一栏,会自动选择我们上面配置的Gitee

    使用Jenkins自动化部署SpringBoot项目

    3. 设置Repository URL 和Credentials,

    Repository URL就是我们的git仓库的地址

    使用Jenkins自动化部署SpringBoot项目

    4. 输入地址后可以看到有错误提示无法连接仓库,需要我们在Credentials中添加我们的Gitee账号和密码,点击上图中的添加 -> Jenkins ,在弹出的窗口中输入我们的账号和密码,ID是我们的唯一标识。

    使用Jenkins自动化部署SpringBoot项目

    5. 如果你的账号、密码、仓库地址均正确,则错误提示消失:

    使用Jenkins自动化部署SpringBoot项目

    6. 在配置构建器一栏中,我们勾选 “Build whenever a SNAPSHOT dependency is built” 和 “Gitee webhook 触发构建,需要在 Gitee webhook 中填写 URL: http://XXXXX ” 两个选项。(注意,这个URL的内容等会我们需要用到)

     使用Jenkins自动化部署SpringBoot项目

    7.  还是在配置构建起这一栏中,我们点击生成按钮,会自动生成一串密码,我们将生成的密码和上一步勾选的URL的http://XXXXX 这两个内容,复制到我们的项目的WebHook中,并点击添加。WWebHook在我们每次 push 代码后,都会给远程 HTTP URL 发送一个 POST 请求 ,我们可以通过这个请求告诉Jenkins代码需要部署了。

    使用Jenkins自动化部署SpringBoot项目

    添加后,可以点击测试按钮可以进行测试,点击查看更多按钮可以查看结果

    使用Jenkins自动化部署SpringBoot项目

    如果状态码是200,则说明添加成功

    使用Jenkins自动化部署SpringBoot项目

    8. 在Build一栏中输入以下内容:

    Root POM:pom.xml

    Goals and options:clean install -DskipTests  

    其中-DskipTests  代表忽略Test构建

    9. 在Post Steps一栏中,选择执行Xshell,并输入以下内容[2]:

    #!/bin/bash
    #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
    export BUILD_ID=dontKillMe
    
    # 防止rm 时候参数变量为空
    cd /tmp/
    
    #最终打包安装的jar包库路径,包括了依赖其他快照jar包(依赖的jar应该不需要删除)
    #mvn_jar_path=/mvn/libspace/com/middol/
    
    #指定最后编译好的jar存放的位置,需要换成你自己的地址
    www_path=/www/wwwroot/jenkins
    
    #Jenkins中编译好的jar位置,需要换成你自己的地址
    jar_path=/root/.jenkins/workspace/ProjectName/target
    
    #先进入target目录
    cd /root/.jenkins/workspace/Test/target
    
    #获取Jenkins中编译好的jar名称,其中XXX为你的pom文件中的artifactId的值,这一步主要是为了根据项目版本号动态获取项目文件名
    jar_name=`ls |grep XXX-|grep -v original`
    
    #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程,需要换成你自己的地址,并建好run.pid文件
    #注意,如果你的服务器有多个项目,要保证每个项目的run.pid文件地址不一样,否则会杀掉其他项目的进程
    pid=$(cat /root/.jenkins/workspace/ProjectName/run.pid)
    
    #杀掉以前可能启动的项目进程
    kill -9 ${pid}
    
    #先进入mvn打包安装的路径删除依赖包
    cd ${mvn_jar_path}
    
    #先删除原来的jar文件,主要目的是删除依赖的快照包(依赖的jar应该不需要删除)
    #rm -rf  /mvn/libspace/com/middol/*
    
    #进入最后指定存放jar的位置
    cd  ${www_path}
    
    #先删除原来的jar文件
    rm -rf ./${jar_name}
    
    #进入指定的编译好的jar的位置
    cd  ${jar_path}
    
    #将编译好的jar复制到最后指定的位置
    cp  ${jar_path}/${jar_name} ${www_path}
    
    #进入最后指定存放jar的位置
    cd  ${www_path}
    
    #启动jar,指定SpringBoot的profiles为dev,后台启动
    nohup java -jar ${jar_name} >/dev/null 2>&1 &
    
    echo haha
    
    #将进程ID存入到run.pid文件中,需要换成你自己的地址
    echo $! > /root/.jenkins/workspace/ProjectName/run.pid

    10. 点击保存并应用,系统会自动回到项目空间主页面,我们点击立即构建,即可构建成功,项目也会自动启动并执行

    使用Jenkins自动化部署SpringBoot项目

    三. 配置SSH

    由于我直接将Jenkins部署到了Test这个项目所在的服务器中,所以在之前的步骤中,没有配置SSH,但假如Jenkins安装到了本地,或者Jenkins和Test不在同一个服务器中,则我们需要配置SSH,将打包的文件通过ssh上传

    1. 安装Publish Over SSH插件,安装方法和前面类似,这里不再赘述

    2. 点击左侧菜单系统管理 -> 系统配置 ->  Publish over SSH,由于之前已经将SSH密码登录禁用,并修改成用证书登录,(修改教程请查看本站《如何将服务器SSH验证方式修改为数字证书登录》一文),所以这里配置ssh的时候,也需要通过证书的方式连接。需要注意的是,之前我们的服务器中只存放了私钥文件,而公钥是在本地的,我们将私钥复制一份,并将本地的公钥内容复制出来,添加在私钥的内容后面。接下来在Passphrase中输入公钥的访问密码,Path to key中输入刚刚新建的密钥地址,然后点击新增按钮,输入ip地址、用户名和name相关信息

    使用Jenkins自动化部署SpringBoot项目

    3. 配置好ssh后,点击左侧菜单中我的视图 ,点击项目名称,选择配置

    使用Jenkins自动化部署SpringBoot项目

    4. 点击构建后的操作模块,选择Send build artifacts over SSH,并进行配置。

    Name:选择我们上面配置的SSH,

    Source files : 项目打包后的jar地址

    Remove prefix将Source files的值去掉.jar的值

    Remote directory:jar包在构建后的地址

    Exec command:构建后要执行的脚本地址

    5. 接下来点击应用,重新构建就可以了。

    四. 其他相关

    我们还可以给Jenkins添加邮件配置,用于每次构建后,通知我们构建结果,这里不再赘述,可以查看以下教程:

    https://www.cnblogs.com/imyalost/p/8781759.html

    参考资料

    [1] Jenkins + Gitee(码云) 实现代码自动化构建

    [2]:Jenkins 部署SpringBoot项目的简单shell脚本 

  • 0
  • 0
  • 0
  • 7.9k
  • llxzuishuai

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: