当前位置: 首页 > news >正文

持续集成实战 —— Jenkins自动化测试环境搭建

1.目的

在日常的项目测试过程中,搭建与维护测试环境是广大测试同学的一个基础技能,相信也很少会有公司完全不让测试去碰自己的测试环境。那么工作中大量的创建、部署、管理、维护等一系列的重复操作就成为了整个测试项目中一个巨大的工作量。

面对这样一种普遍的情况,Jenkins作为持续集成的良好解决方案就可以很好的解决以上的这些问题。对于一些重复的搭建部署操作都可以通过Jenkins来进行自动化完成,无需任何人工干预,有利于减少重复过程以节省时间、费用和工作量,让测试同学腾出更多的时间与精力来关注并着眼于其他的重要测试环节。

2.说明

1.此笔记的中所使用的操作系统为CentOS7.9,笔记中所涉及的软件版本有可能会因为时间的推移而导致不匹配或其他额外的操作,请大家有针对性的选择阅读与参考。

2.此笔记中的所有操作均基于root用户进行,其他用户如无权限请自行搜索(linux的基础操作这里不展开讨论),友情提示:即使有权限,也千万别在公司相关生产环境内试验探索哦。

3.本次实战中使用的是我们公司相关的业务项目,其中的代码与产品界面会做相关的脱敏操作。

3.项目描述&事前准备

1.文中产品项目为微服务架构,其他无关服务都已被简化省略,仅展示部分模块。

2.原有服务已简化,将服务器独立分为Jenkins服务器与业务服务器,不展示多余集群与节点,只需准备两台服务器即可(真机、虚拟机随意)

3.本文的主题是介绍Jenkins在持续集成中的使用方式,开发环境与所用到的软件版本可以任意指定,功能没有太大的区别,也不会影响使用。(文中使用的软件可以任意替换,任何的技术栈都可以,Jenkins除外)

4.环境介绍

服务器分为两台,Jenkins应用服务器与业务服务器,以下简称J-Server与S-Server。本文使用CentOS,J-Server中安装Jenkins即可,S-Server安装Java、Tomcat、Maven、Git即可。(这里的技术栈可以根据各自公司的业务与产品来进行随意调整,我们的项目内也有很多组合,只选取市面上最常见的来讲解)

5.服务基础配置

5.1 J-Server

服务器内的Jenkins安装与配置请参看之前的文章:

(【Jenkins使用手册(1) -- 软件安装】)

(【Jenkins使用手册(2) -- 软件配置】)

5.2 S-Server

业务服务器内的软件安装请自行网络搜索,网上有很多优秀的教程供大家参考。这里需要介绍的是一些重要的配置操作。

1.这里为了方便Git与Server之间进行安全的项目源代码的安全传输操作,我们需要在服务器中进行设置。

在Git安装完之后使用以下命令进行Git的全局配置

git config  --global user.name "你的用户名"
git config  --global user.email "你的邮箱"

使用ssh-keygen命令进行密钥的生成

ssh-keygen -C 邮箱 -t rsa

这里会询问你要创建的密钥的文件名,默认名字的话就直接回车

 接下来询问是否要为密钥设定密码,默认回车跳过

完成之后在用户的主目录中会有一个影藏文件夹.ssh

进入后查看刚才的密钥是否生成正确

后缀名.pbu的是公钥

 

然后我们进入这个公钥文件,将文件里的内容复制出来

 2.在GitHub中点击设置,选择SSH and GPG keys

创建一个新的SSH key

Title输入你自定义的名字即可

Key输入刚才在公钥中复制的那一串字符

确定添加

 确认添加成功后Git与SSH密钥配置完成

6. Jenkins自动化任务配置与部署

6.1 节点创建

在Jenkins工作台中选择系统管理 > 节点管理

 选择新建节点

节点名称输入你指定的名称即可

如果是全新节点的话可选择固定节点

点击创建

 远程工作目录指的是S-Server上将执行自动化任务的路径位置

启动方式选择Launch agents via SSH

主机填入对应的S-Server的IP

凭证填入对应的S-Server登录用户名和密码(新建凭证看下面的操作)

主机密钥验证策略可以选择Non verifying Verification Strategy

 没有凭证的话点击添加,选择Jenkins

其他选项不动,输入用户名和密码保存即可,之后在Credentials

下拉框里直接选择即可

6.2 启动并同步节点

添加完成后点击对应的节点名称,进入节点

 点击重启代理

启动完成后,日志提示启动成功后返回列表查看节点状态,显示同步则表示节点启动成功

 

6.3 自动化任务创建

点击节点后选择新建任务

 

输入自定义的任务名称并选择构建自由风格的软件项目

确定添加

6.4 自动化任务配置

描述中输入任务相关的一些说明(非必须),这里还是推荐大家填写一下,很多必备的信息甚至备注都可以放在里面,方便其他测试人员快速的对任务有一个了解。

 

如果每个节点内的环境不是集群或业务有所不同的话还是建议勾上限“制项目的运行节点”的选项,并指定对应的服务节点。

 

在源码管理中选择Git

 

这里在仓库URL中输入项目的源代码下载地址,基于之前已经添加过SSH key了,下载的方式就在Git上选择SSH。在此之前大家记得把自己的项目或产品源代码push至对应的Git仓库并保证S-Sever可以clone代码至本地。

(这里根据自己公司的业务来进行选择,无论是公有仓库还是私有仓库,云还是私有化部署的仓库)

另外如果是第一次在新任务中创建仓库URL,记得在下面多创建一次仓库URL

凭证之前已经添加过了,直接选择S-Server的账密记录即可

 

这里选择源代码在Git上所对应的分支,默认为master分支,我的项目源代码在main分支上,这边就输入*/main

在扩展行为中选择新增

 选择“检出到子目录”,英文选项(check out to a sub-directory)

 输入自己定义的子目录名字即可

在构建中选择增加构建步骤,选择执行shell

 

自动化任务的流程示意图

 

基于以上的技术栈,我们执行以下shell命令

方便Jenkins进行后台运行

BUILD_ID=dontkillme

设置两个全局变量,第一个可以返回工作目录所在位置,也就是刚才Jenkins中设置的远程目录;第二个可以返回Tomcat的安装位置,方便后续脚本内的Tomcat相关服务的操作。

export WORK_PATH=`pwd`
export TOMCAT_PATH=`S-Server内的tomcat安装路径`
sh $WORK_PATH/build.sh

6.5 自动化任务运行

点击保存后,点击任务名

 

进入后点击左侧的立即构建

 

点击任务队列中对应的任务

 

选择控制台输出或直接查看状态图标

 最后显示Finished: SUCCESS 就表示构建成功了

至此一个测试环境就通过Jenkins的自动任务构建完成了,大家可以通过对应的服务IP和端口进行访问验证。

以上只是展示了如何通过Jenkins来进行测试环境的快速自动化搭建,后续会对实战中的一些细节来进行讲解。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

相关文章:

持续集成实战 —— Jenkins自动化测试环境搭建

1.目的 在日常的项目测试过程中,搭建与维护测试环境是广大测试同学的一个基础技能,相信也很少会有公司完全不让测试去碰自己的测试环境。那么工作中大量的创建、部署、管理、维护等一系列的重复操作就成为了整个测试项目中一个巨大的工作量。 面对这样…...

ajax上传文件

背景 采用ajax传递表单内容和上传的文件 实现原理 使用FormData模拟表单数据,实现异步上传图片 代码 var formData new FormData(); formData.append("serviceId", param.serviceId); formData.append("keyId", param.keyId); formData.a…...

使用jib-maven-plugin插件构建镜像并推送至私服Harbor

jib-maven-plugin 插件配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apa…...

道路空间功率谱密度与时间功率谱密度(笔记)

0.随机路面 仿真时间200秒 车速15m/s 采样间隔0.25秒&#xff08;4Hz&#xff09; A级路面平均振幅&#xff1a;0.0044米 B级路面平均振幅&#xff1a;0.0087米 C级路面平均振幅&#xff1a;0.0173米 D级路面平均振幅&#xff1a;0.0346米 1.先上代码其中之一 clc clear clo…...

JMeter接口测试之文件上传

最近用JMeter做接口测试&#xff0c;频繁遇到了文件上传的接口&#xff0c;与其他一般接口的处理方式不一样&#xff0c;想着分享下&#xff0c;希望能给测试同学一点启发。 文章将围绕三个部分进行展开&#xff1a; 一、用户场景 二、接口请求参数 三、JMeter脚本编写步骤…...

自动化测试需知的4项测试工具!

一般来说学自动化会建议大家先学selenium&#xff0c;因为最早的时候&#xff0c;自动化就代表selenium&#xff0c;进入测试行业就开始做接口测试&#xff0c;而且现在基本每个公司都需要接口测试。今天就和大家聊一下接口测试的工具。 一、Robot Framework 机器人框架。之所…...

【深度学习】clip-interrogator clip docker 容器启动过程

文章目录 dockerfile备忘ENTRYPOINT ["bash", "/app/startProject.sh"]常用docker指令web服务脚本访问接口文件 给一张图片&#xff0c;输出图片描述。 dockerfile备忘 只有从dockerfile制作的镜像才有分层结构&#xff0c;加速传输&#xff0c;故第一步…...

Linux设备驱动之gpio-keys

Linux设备驱动之gpio-keys 前两个章节介绍了Linux字符设备和platform设备的注册&#xff0c;他们都是比较基础的&#xff0c;让大家理解Linux内核的设备驱动是如何注册、使用的。但在工作中&#xff0c;个人认为完全手写一个字符设备驱动的机会比较少&#xff0c;更多的都是基…...

【vue3页面展示代码】展示代码codemirror插件

技术版本&#xff1a; vue 3.2.40、codemirror 6.0.1、less 4.1.3、vue-codemirror 6.1.1、 codemirror/lang-vue 0.1.2、codemirror/theme-one-dark 6.1.2 效果图&#xff1a; 1.安装插件 yarn add codemirror vue-codemirror codemirror/lang-vue codemirror/theme-one-dar…...

【面试必刷TOP101】链表相加 单链表的排序

目录 题目&#xff1a;链表相加(二)_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;单链表的排序_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a;…...

Visual Studio复制、拷贝C++项目与第三方库配置信息到新的项目中

本文介绍在Visual Studio软件中&#xff0c;复制一个已有的、配置过多种第三方库的C项目&#xff0c;将其拷贝为一个新的项目&#xff0c;同时使得新项目可以直接使用原有项目中配置好的各类**C**配置、第三方库等的方法。 在撰写C 代码时&#xff0c;如果需要用到他人撰写的第…...

rust迭代器

迭代器用来遍历容器。 迭代器就是把容器中的所有元素按照顺序一个接一个的传递给处理逻辑。 Rust中的迭代器 标准库中定义了Iterator特性 trait Iterator {type Item;fn next(&mut self) -> Option<Self::Item>; }实现了Iterator特性的结构体就是迭代器。 很多类…...

软件定制开发的优势与步骤|APP搭建|小程序

软件定制开发的优势与步骤|APP搭建|小程序 定制开发的优势&#xff1a; 1. 满足特定需求&#xff1a;定制开发可以根据客户的实际需求进行设计和开发&#xff0c;使得软件系统能够更好地满足客户的业务目标。 2. 优化用户体验&#xff1a;通过深入了解客户的需求&#xff0c;定…...

ERR_CONNECTION_REFUSED等非标准的HTTP错误状态码原因分析和解决办法

文章目录 一、DNS Resolution Failed1&#xff0c;DNS服务器故障2&#xff0c;DNS配置错误3&#xff0c;DNS劫持4&#xff0c;域名过期-5&#xff0c;其他网络问题 二、ERR_CONNECTION_REFUSED-"ERR_CONNECTION_REFUSED" 错误可能有多种原因 三、ERR_SSL_PROTOCOL_ER…...

瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件

瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件 前言 在学习Grid布局之时&#xff0c;我发现其是CSS中的一种强大的布局方案&#xff0c;它将网页划分成一个个网格&#xff0c;可以任意组合不同的网格&#xff0c;做出各种各样的布局&#xff0c;在刷某书和某宝首页时&…...

ES6面试题总结

1. 谈谈你对 ES6 的理解,为什么要学习es6? ES6是新一代的JS语言标准&#xff0c;对分JS语言核心内容做了升级优化&#xff0c;规范了JS使用标准&#xff0c;新增了JS原生方法&#xff0c;使得JS使用更加规范&#xff0c;更加优雅&#xff0c;更适合大型应用的开发。学习ES6是成…...

mybatisplus,jdbc 批量插入

1.测试用例 项目中遇到在做导入号码的时候我们会用到批量导入&#xff0c;提高入库的速度。接下来我们以10000条为测试用例。 1.1 批量执行sql语句 当需要成批插入或者更新记录时&#xff0c;可以采用Java的批量更新机制&#xff0c;这一机制允许多条语句一次性提交给数据库…...

如何使用IP归属地查询API来追踪网络活动

引言 在当今数字化世界中&#xff0c;了解网络活动的源头和位置对于网络安全、市场研究和用户体验至关重要。IP归属地查询API是一种强大的工具&#xff0c;可以帮助您追踪网络活动并获取有关IP地址的重要信息。本文将探讨如何使用IP归属地查询API来追踪网络活动&#xff0c;以…...

【SQL】S0 系列博文大纲

系列博文大纲 SQL 学习环境建议系列博文相关书籍系列博文大纲阶段进展 SQL 学习环境建议 对于 SQL 语言的学习&#xff0c;博主本地使用&#xff1a;MySQL DataGrip&#xff1b; MySQL 提供本地数据库服务&#xff1b; DataGrip IDE&#xff0c;承担编程运行测试任务&#xf…...

2023年8月体育用品行业数据分析(京东数据产品)

当前&#xff0c;亚运会临近&#xff0c;这也带动了国民对体育消费的热情&#xff0c;体育产品内销逐渐旺盛&#xff0c;“亚运经济”红利开始显现。鲸参谋数据显示&#xff0c;今年8月份&#xff0c;京东平台上体育用品行业的销量为185万&#xff0c;同比增长2%&#xff1b;销…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...