Jenkins自动部署测试环境之jar包部署

简介: 启动脚本里面,获取已经启动的jar包进程名时,用ps -ef|grep MyFirstSpringBootDemo*.jar ,通过jenkins调用就获取不到进程名称,但是在服务器上直接执行可以获取到,将jar包名写成完整的之后就可以。

在我们的日常工作中,可能经常会遇到以下问题:

1、测试环境是由开发去更新的,当开发忙于改bug的时候,测试环境更新频率比较低,问题不能得到及时的验证

2、频繁的找开发去更新环境的话 ,耽误别人的工作,长此以往,也容易激起开发和测试之间的矛盾

那么我们如何解决上面的问题呢?那就是让测试人员也具备搭建测试环境的能力。很多企业现在测试环境和开发环境都独立分开了,开发人员都没有操作测试环境的权限。


公司内部一套完整的环境搭建可能会涉及到很多其他的中间件之类的,但这种不需要经常更新,我们先从最简单的更新测试环境的代码包开始。


常见的部署包有哪些呢?

在学习如何搭建环境之前,我们首先要了解一下,一般常见的部署包有哪些种类?

下面我简单介绍一下我所接触过的部署包,列举的肯定不全,这个大家要根据公司的实际情况去做相应的分析和了解。

jar、war  、压缩包、apk安装包、docker镜像


部署包怎么来的?

大家不要想着开发直接丢给你一个部署包,然后让你直接拷贝到服务器上然后去解压或者执行什么命令之类的-- 当然,这种方式也是可以的 ,只要你们不嫌麻烦,这个只是初级阶段需要掌握的。

掌握初级阶段之后,剩下的应该是要去思考 部署包到底是怎么来的? 能不能自己打出部署包?答案当然是可以的。

下面列举一些获取部署包这块,可能需要去掌握的一些技能:

1、maven、ant: java代码打包工具,目前应该是maven用的多些,ant的话,做测试如果用到jmeter,应该会用到。

maven的常见命令可以了解一下:

mvn   -DskipTests 和 -Dmaven.test.skip=true 区别
mvn -U clean install/package/deploy 

2、gradle:安卓代码打包工具

3、前端代码的话 现在一般需要安装nodejs,npm之类的,具体怎么打包可以自己跟进实际业务场景去了解

4、MsBuild:dotnet代码和dotnet core 代码打包,也就是C#代码的编辑器


如何实现jar包自动部署?

首先,java代码打包是可以打成jar包或者war包的,jar包和war包的部署方式会略有不同,下面以打成jar包部署到linux系统为例,记录一下如何通过jenkins配置自动部署。

准备工作:

  • 一个简单的后端代码

我这里准备的是一个自己写的SpringBoot的demo,集成了swagger,部署之后可以看到一个swagger的页面,里面实现和查询数据库里面用户的接口,源代码上传到了gitee上,地址如下:仓库代码设置为私有的,有需要的话微信私聊我就行,大家可以用自己公司的项目或者找其他部署包进行模拟部署也可以。

https://gitee.com/libo_277169949/MyFirstSpringBootDemo

  • mysql数据库

项目里面会用到连接数据库的配置,当然部署后你调用接口查数据的话,swagger页面能出来


下面先讲一下部署的思路:

1、获取源码,进行编译打包,得到部署包

2、将部署包自动传输到要部署的服务器上去(通过Publish Over SSH插件)

3、远程执行shell脚本启动jar包(通过SSH Plugin插件)


部署操作:

1、在jenkins上安装Publish Over SSH和SSH Plugin插件,并在jenkins->系统管理->系统配置 下找到跟SSH相关的配置,将要远程操作的服务器的相关信息配置进去:


微信图片_20220113160426.png


微信图片_20220113160430.png


2、先在服务器上写好一个deploy.sh的shell脚本用来启动和停止jar包,具体内容如下:

#!/bin/bash
source /etc/profile
pid=`ps -ef|grep MyFirstSpringBootDemo-1.0-SNAPSHOT.jar| grep -v grep | awk '{print $2}'`
echo "部署前的pid进程 :$pid"
# 关闭已经启动的jar进程
if [ -n "$pid" ]
  then
    kill -9 $pid
else
    echo "进程没有启动"
fi
sleep 5s
#copy jar 到启动目录
\cp -rf /root/app/MyFirstSpringBootDemo-1.0-SNAPSHOT.jar  /root/app/deploydir/MyFirstSpringBootDemo-1.0-SNAPSHOT.jar
cd /root/app/deploydir
nohup /root/tools/jdk1.8.0_251/bin/java -jar /root/app/deploydir/MyFirstSpringBootDemo*.jar --server.port=8081 >/root/app/logs/MyFirstSpringBootDemo.log 2>&1 &
echo "脚本执行完毕"
sleep 5s
pid=`ps -ef|grep MyFirstSpringBootDemo-1.0-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
# 检验进程是否启动
if [ -n "$pid" ]
  then
        echo "部署后的pid进程 :$pid"
                echo "启动成功"
else
    echo "进程没有启动"
fi


脚本说明:

先查看jar是否正在运行,运行的话,部署前先停掉,把部署包替换后,然后启动jar包

3、jenkins上相关配置:

获取脚本:



微信图片_20220113160432.png


编译代码打包:


微信图片_20220113160435.png


上传部署包到服务器:


微信图片_20220113160437.png


上面的执行脚本也可以换成下面的插件去调用:


微信图片_20220113160439.png


到这里,部署操作就基本上完成了,以后需要更新测试环境的时候,直接点击一下job的立即构建按钮就可以了,一个简单的jar包部署到linux服务器上的demo就完成了,你学会了吗?


部署后效果验证:

部署后,访问以下地址如果能正常访问即表示部署成功:

http://106.53.29.33:8081/


微信图片_20220113160442.png


http://106.53.29.33:8081/swagger-ui.html


微信图片_20220113160445.png


思考?

1、测试环境如何提升部署效率呢?当打出来的jar包比较大的时候,传输到服务器比较慢,怎么处理呢?(尽可能的考虑局域网内传输)

2、如果在windows上部署jar包又该如何处理呢?

3、整个部署过程或者启动脚本还有哪些可以优化的点呢?(比如说参数化构建,同一个job选不同的环境或者配置进行部署,部署后邮件或者钉钉通知之类的等等。)

4、如果同一个jar包要部署不同的环境该怎么处理呢?(提示:不同环境的配置不一样,打包的时候可以指定配置文件)


今天踩的坑:

启动脚本里面,获取已经启动的jar包进程名时,用ps -ef|grep MyFirstSpringBootDemo*.jar ,通过jenkins调用就获取不到进程名称,但是在服务器上直接执行可以获取到,将jar包名写成完整的之后就可以。


其他包部署思路:

war包:部署在tomcat容器中或者直接通过java -jar xxx.war启动即可。

IIS站点网站部署:替换部署包后,重启站点服务

前端代码:将编译后的部署包上传到服务器某个目录,重启ngnix或其他服务

其他的部署都是类似的,一般是替换文件,重启服务。在编译之前,如果需要手动改配置文件之类的,可以辅助用其他的脚本去实现,主要是通过命令行能操作的事情,都可以集成到jenkins中去。

相关文章
|
1天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
16 2
|
17天前
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
42 10
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
56 5
|
3月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
4843 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
1604 1
|
3月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
829 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
3月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
237 0
|
3月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
88 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
3月前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
337 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
3月前
|
jenkins Java 持续交付
Jenkins打包,发布,部署
Jenkins打包,发布,部署
294 0