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月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
231 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
3月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
114 2
|
26天前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
39 9
|
27天前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
43 8
|
2月前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
74 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
2月前
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
94 12
|
2月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
66 5
|
3月前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
3月前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
140 4
|
3月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
77 0

热门文章

最新文章