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月前
|
IDE Java Linux
Seata常见问题之重新打包以单独用jar来部署如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
107 1
|
1月前
|
Java 开发工具 Windows
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
|
1月前
|
网络协议 Java Nacos
Nacos报错问题之jar 包启动就报错误如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
|
1月前
|
Java Shell Docker
Docker启动后怎样运行jar包文件
Docker启动后怎样运行jar包文件
|
2月前
|
Java Linux Windows
windows实现自动部署jar包运行程序
windows实现自动部署jar包运行程序
43 0
|
27天前
|
Java Maven 微服务
springboot项目开启远程调试-jar包
springboot项目开启远程调试-jar包
20 0
|
1月前
|
Java Serverless 测试技术
Serverless 应用引擎常见问题之上传自定义jar包自动vpc启动报错如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
32 4
|
1月前
|
JavaScript Java jenkins
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
85 0
|
1月前
|
jenkins Java 持续交付
详解如何使用Jenkins一键打包部署SpringBoot项目
详解如何使用Jenkins一键打包部署SpringBoot项目
76 0
|
1月前
|
NoSQL Java 应用服务中间件
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包