jenkins持续集成从0入门到实战【四】构建SpringBoot项目

简介: 打包发布SpringBoot项目

构建发布

jenkins发布项目的过程可以总结为4个步骤

  1. 拉取代码
  2. 编译打包(mvn或npm)
  3. 部署至应用服务器(scp命令)
  4. 启动应用

SpringBoot项目发布

  1. 准备SpringBoot项目

    这里我继续以上面Maven集成模块的代码为例,添加应用访问的接口和端口,并将代码提交至Gitee

    image.png

    浏览器访问本地的服务是否启动成功

    image.png

    提交代码并推送至Gitee(此处你也可以使用Git命令的方式)

    image.png

    弹出登录提示,输入用户名密码

    image.png

    在Gitee上检查到代码推送成功

    image.png

  2. 添加Maven风格的任务

    image.png

    填写Gitee仓库地址

    image.png

    填写Maven构建操作项

    image.png

  3. 配置Post Steps,选中执行shell

    image.png

    image.png

    思考,这里我们需要执行的shell内容是什么?

    是不是把当前编译好的jar包拷贝到应用服务器去启动

  4. 应用服务器规划

    由于jenkins构建消耗内存极大,一般jenkins是一台单独的工具机器,Java项目一般在其他的机器上,这里我重新安装一台虚拟机,有条件的同学可以直接开通阿里云的ECS

    应用服务器信息

    • IP:192.168.1.2
    • JDK:1.8(安装过程省略)
    • user:admin
    • 部署路径:/data/app/it235-boot
    • 端口:9010
  5. 配置ssh免密登录

    免密登录主要是方便jenkins服务器的jenkins用户—》应用服务器的admin用户上的jar包拷贝,部署本就是jar包拷贝的过程

    • 在jenkins机器上使用jenkins用户生成秘钥

      $ su jenkins
      $ ssh-keygen -t rsa
      # 3次回车
      

      运行后会在当前用户的根目录生成一个.ssh文件夹

      image.png

    • .ssh文件夹中的文件描述

      • id_rsa : 生成的私钥文件
      • id_rsa.pub : 生成的公钥文件
      • know_hosts : 已知的主机公钥清单

      接下来需要将公钥导入到认证文件中

      $ su jenkins
      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

      如果希望ssh公钥生效需满足至少下面两个条件:

      • .ssh目录的权限必须是700
      • .ssh/authorized_keys文件权限必须是600
    • 给对应文件授权

      $ chmod 700 ~/.ssh
      $ chmod 600 ~/.ssh/authorized_keys
    • authorized_keys文件拷贝到应用服务器的admin用户.ssh目录下

      # 在应用服务器(192.168.1.2)上用admin用户创建/home/admin/.ssh文件夹
      
      # 在jenkins服务器(192.168.1.195)上将pub公钥文件拷贝到应用服务器的.ssh目录下,并命名为authorized_keys
      $ scp -p ~/.ssh/id_rsa.pub admin@192.168.1.2:/home/admin/.ssh/authorized_keys
    • 在jenkins服务器上进行免密连接测试

      # 在jenkins服务器的/home/admin目录下创建filetest文件,并拷贝到应用服务器
      $ cd ~/
      $ touch filetest
      $ scp -p filetest admin@192.168.1.2:/home/admin/filetest
      # 进入到应用服务器(192.168.1.2),检查/home/admin目录下是否出现filetest
      
      # 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
      $ ssh admin@192.168.1.2
      Last login: Sun Sep 20 21:53:03 2020
      $ exit
    • 到此免密登录和拷贝实现成功,为接下来jar包部署提供了快捷的帮助
  6. 编写jenkins发布脚本

    #!/bin/bash
    
    echo "部署的目录和项目名称"
    DIR="/data/app"
    projectName="it235-boot"
    
    echo "待部署的应用服务器,可多台"
    server_ips="192.168.1.2"
    for server_ip in ${server_ips[@]}
    do
    
    echo "ssh连接进行备份操作"
    ssh -Tq -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
    mkdir -p $DIR/backup/${projectName}
    if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
      mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
    fi
    EOF
    
    echo "拷贝jar包到目标服务器的tmp目录"
    scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar admin@${server_ip}:/tmp/${projectName}.jar
    
    echo "ssh远程连接进行发布操作"
    ssh -q -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
    mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
    
    EOF
    
    done
    
    echo "success"
  7. 编写应用启动脚本

    • /data/app/it235-boot目录下创建启动脚本

      $ touch start.sh
      $ vim start.sh
      # 将下面代码粘贴到start.sh中
      #!/bin/bash
      set -e #任何命令出错就退出
      set -o pipefail
      
      APP_ID=it235-boot
      APP_DIR="/data/app"
      
      nohup java -Dspring.profiles.active=dev -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
      start_ok=false
      if [[ $? = 0 ]];then
              sleep 3
              tail -n 10 release_out.log
              sleep 5
              tail -n 50 release_out.log
      fi
      aaa=`grep "Started" release_out.log | awk '{print $1}'`
      if [[ -n "${aaa}" ]];then
          echo "Application started ok"
          exit 0
      else
          echo "Application started error"
          exit 1
      fi
    • /data/app/it235-boot目录下创建停止脚本

      $ touch stop.sh
      $ vim stop.sh
      # 将下面代码粘贴到stop.sh中
      #!/bin/bash
      
      APP_ID=it235-boot
      ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
    • 并进行启动和停止测试,查看日志输出是否正常
    • 将下述启动代码配置jenkins

      sh $DIR/${projectName}/stop.sh
      sh $DIR/${projectName}/start.sh
  8. 访问并测试代码是否生效

    • 如果是虚拟机则需要给防火墙添加9010端口

      $ su root
      # 开启防火墙9010端口
      $ firewall-cmd --zone=public --add-port=9010/tcp --permanent
      # 使配置生效
      $ firewall-cmd --reload

      image.png

    • 如果是ECS则需要在安全组中开放9010端口(此处省略)
    • 此外也可以采用Nginx映射(此处省略)
  9. 修改代码返回值,提交至Gitee,并再次进行构建发布,访问http://192.168.1.2:9010查看结果是否更新

    image.png

    image.png

    image.png

  10. 到此一个简单的SpringBoot项目发布完成,但企业中的发布往往比这要复杂很多,在参数化构建章节再为您详细讲解,比如:

    • 自动构建
    • 按分支发布
    • Tag发布
    • 节点发布
    • 流水线发布等等,
相关文章
|
10天前
|
Java 应用服务中间件 Maven
Spring Boot项目打war包(idea:多种方式)
Spring Boot项目打war包(idea:多种方式)
32 1
|
9天前
|
Java Maven
SpringBoot项目的用maven插件打包报Test错误
SpringBoot项目的用maven插件打包报Test错误
|
10天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
36 3
|
10天前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
39 3
|
10天前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
20 1
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的创新创业教育中心项目申报管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的创新创业教育中心项目申报管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
4天前
|
安全 JavaScript Java
装饰工程|装饰工程管理系统-项目立项子系统的设计与实现|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)
装饰工程|装饰工程管理系统-项目立项子系统的设计与实现|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)
11 0
|
7天前
|
前端开发 JavaScript Java
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
|
9天前
|
Java 开发者 Spring
springboot DDD的概念以及实战
【5月更文挑战第15天】领域驱动设计(Domain-Driven Design,简称DDD)是一种软件设计方法论,它强调基于业务领域的复杂性来构建软件
25 2
|
10天前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
19 2

热门文章

最新文章