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相关的配置,将要远程操作的服务器的相关信息配置进去:

 

 

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上相关配置:

获取脚本:

 

编译代码打包:

上传部署包到服务器:

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

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

 

部署后效果验证:

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

http://106.53.29.33:8081/

 

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

 

思考如何优化?

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中去。

原文地址:https://blog.51cto.com/u_7739395/2736899

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


基础环境、流程图1)流程图jenkinspipeline发布应用2)、jenkins上安装kubectl#主节点上查看kubectl位置[root@k8s01~]#whichkubectl/usr/bin/kubectl#将k8s节点的kubectl文件cp至jenkinsscp10.0.0.101:/usr/bin/kubectl.cp./kubectl/usr/local/bin/kubectl
本节是建立在流水线入门内容的基础上,而且,应当被当作一个参考。对于在实际示例中如何使用流水线语法的更多信息,请参阅本章在流水线插件的2.5版本中的使用Jenkinsfile部分,流水线支持两种离散的语法,具体如下对于每种的优缺点,参见语法比较。正如本章开始讨论的,流水线最
Linuxcentos7安装Jenkins(jenkins-2.227-1.1.noarch.rpm)时遇到问题:1.出现问题1:安装jenkins一直失败,提示Nosuchfileordirectory[helen@linuxprobeJenkins]$sudorpm-ivhjenkins-2.227-1.1.noarch.rpmPreparing...####################
作为一个拥有很多账号的当代美少女,忘记用户名密码什么的是再正常不过的事了。“忘记密码”这一功能给我真的带来了很大的福音啊。但是最近重新使用Jenkins时,看到需要输入用户名密码,顿时脑子一片空白。经过一系列的查找,终于解决了问题,害,只有把方法记下来才是王道,以后妈妈再
Jenkins、GitLab和Maven(Nexus)完成自动构建迈向持续集成持续集成,毋庸置疑的是这是两部分要求,一个是持续一个是集成,那么持续和集成到底表示了什么要求和含义呢?其中的集成比较容易理解就是指开发人员将自己开发的代码不断地交付给全部系统的代码,在Git仓的概念之下也就是不断地
 下载文档https://www.jenkins.io/zh/download/  Debian下载1.下载安装keyhttps://pkg.jenkins.io/debian-stable/jenkins.io.key  
流水线建设从Jenkins部署开始Jenkins是一个独立的开源自动化服务器,可以用来自动化,例如构建、测试和部署软件等各种任务,是一个实现CI(持续集成)的很好的工具。Jenkins可以通过本地系统包、Docker安装,甚至可以在安装Java运行时环境的机器上独立运行。JenkCI/CD的概念谈到持
原因:这种情况是SSHServer中的RemoteDirectory路径不存在。解决方法:重新输入目标服务器中存在的路径。      
什么是持续集成持续集成(Continuousintegration,简称CI)指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。通过持续集成,团
Tomcat安装:1.下载Tomcat包:http:/omcat.apache.org/并解压2.启动:双击bin\startup.bat文件浏览器访问:http://localhost:8080/3.Tomcat配置登录:打开confomcat-users.xml文件添加如下代码:<rolerolename="manager-gui"/><userusername="admin"password=&q
文章目录jenkinscron笔记简介H符号(hash的简写)别名例子jenkinscron笔记简介jenkinscron遵循普通cron的语法,略有不同,每行包含五个字段可以使用Tab和空行分割分钟小时日月周0-590-231-311-120-7(0和7都表示周日)可以使用以下操作符为一个字段指定多个值(按照
1.nginx的配置location/jenkinsno{indexindex.htmlindex.htm;proxy_passhttp://127.0.0.1:8081;proxy_connect_timeout3000s;proxy_send_timeout3000s;proxy_read_timeout3000s;prox
1、下载安装插件下载地址:http://files.jetbrains.org.cn/aliyun-oss.hpi在Jenkins中安装插件,请到ManageJenkins->Advanced->Upload,上传插件(.hpi文件)安装完毕后请重新启动Jenkins2、搜索安装jenkins插件安装3、安装完成以后配置阿里云oss账号oss这边设置:(账号的权限也要
首先将构建历史清除Jenkins构建历史删除与重置然后进入Jenkins服务器工作目录oot/.jenkinstar-czvfjobs.tarjobs 将jobs打包将job.tar文件复制到新Jenkins服务器相同目录下解压tar包 tar-zxvfjob.tar登录新JenkinsJenkins-系统管理-读取配置,只有点击了读取配置,原
一、动态生成Slave1.1、简介之前我们都是在物理机或者虚拟机上部署jenkins,但是这种部署方式会有一些难点,如下:主Master发生单点故障时,整个流程都不可用了每个Slave的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是
from jenkins import Jenkins# 判断job是否运行结束def build():    job = 'branch-deploy-wap'    params = {        'server_ip': '10.160.30.XXX',        'server_username': 'root',        'server_userpass&#
背景client端执行webUI自动化测试时依赖操作系统上安装了对应的浏览器,并且浏览器与驱动要进行版本的对应——而selenium是可以部署集群,通过远程的方式执行对应的自动化用例,方便高效。原理1、通过代码可知,自动化运行的主类接收了任务id,获取到任务信息后根据任务类型判断进行接口
背景工具选择架构设计及技术实现参数设计断言持续集成测试集编写总结  一、背景1.目前公司发展比较迅速,还处于不停堆业务阶段,所以迭代比较频繁,导致人工回归的成本越来越大2.在有限的测试资源情况下,开发自测的需求占比不低,后端频繁发布容易心里没底
本地pycharm打开项目,运行自动化项目下载项目代码,并用pycharm打开项目gitclonehttps://gitee.com/iread9527/iInterface_python.git进入iInterface_python目录下,cdiInterface_python使用pip3install-rrequirements.txt命令,安装python项目依赖的第三方库使
Jenkins邮件设置一、简介最近有朋友问Jenkins邮件设置的问题,想起来当时也是碰到不少坑,网上看了很多博客说的解决办法根本没有用。最后我解决了这个问题,在此记录一下,希望能够帮助到在网上搜了半天仍然徒劳无功的朋友们,我懂那种失败了一次又一次的感觉,希望能帮到大家。二、配置步