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发布
    • 节点发布
    • 流水线发布等等,
相关文章
|
3天前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
11 3
|
3天前
|
Java 开发工具 git
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
10 4
|
3天前
|
消息中间件 JSON Java
RabbitMQ的springboot项目集成使用-01
RabbitMQ的springboot项目集成使用-01
|
3天前
|
JavaScript Java
kkFileView在线文件预览与项目集成
kkFileView在线文件预览与项目集成
|
14天前
|
监控 前端开发 jenkins
Jenkins在前端项目持续部署中的应用,介绍了Jenkins作为自动化部署工具的基本概念和流程
【4月更文挑战第29天】本文探讨了Jenkins在前端项目持续部署中的应用,介绍了Jenkins作为自动化部署工具的基本概念和流程。前端持续部署涉及代码提交、构建、测试和部署四个步骤。实现过程中需配置代码仓库、构建、测试和部署任务,安装相关插件并确保环境一致性。注意事项包括代码质量控制、环境一致性、监控预警和安全管理。通过Jenkins,可提升前端开发效率和质量,但需不断学习以应对技术发展。
|
18天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
|
27天前
|
jenkins Java 持续交付
实战指南:运用Jenkins实现Java项目的持续集成与自动化部署
【4月更文挑战第17天】Jenkins是一款强大的开源CI/CD工具,广泛用于Java项目的自动化构建、测试和部署。通过配置Jenkins环境、创建Job、设定构建触发器和步骤,实现持续集成和部署。集成Maven、Git等工具,确保代码质量并加速上线。持续部署阶段,Jenkins可将工件发布至远程服务器或云环境,实现高效、稳定的自动化流程。实践过程中,关注工作流优化、配置备份和服务器状态监控,以提升整体开发效率和软件质量。
|
5月前
|
jenkins Java 持续交付
【项目集成工具】Jenkins
【项目集成工具】Jenkins
|
2月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
58 0