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月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
199 3
|
3月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
444 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
3月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
409 2
|
3月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
219 2
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
56 0
|
3月前
|
存储 人工智能 Java
Springboot集成AI Springboot3 集成阿里云百炼大模型CosyVoice2 实现Ai克隆语音(未持久化存储)
本项目基于Spring Boot 3.5.3与Java 17,集成阿里云百炼大模型CosyVoice2实现音色克隆与语音合成。内容涵盖项目搭建、音色创建、音频合成、音色管理等功能,适用于希望快速掌握Spring Boot集成语音AI技术的开发者。需提前注册阿里云并获取API Key。
|
11月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
315 2
|
8月前
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
709 9
|
9月前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
243 8

推荐镜像

更多