持续交付中流水线构建完成后就大功告成了吗?别忘了质量保障

news2024/12/23 1:50:02

上期文章我结合自己的实践经验,介绍了持续交付中流水线模式的软件构建,以及在构建过程中的3个关键问题。我们可以看出,流水线的软件构建过程相对精简、独立,只做编译 和打包两个动作。

但需要明确的是,在持续交付过程中,我们还要做很多与质量保障相关的工作,比如我们前面提到的各类功能测试和非功能测试。

所以,今天我们聊一聊在流水线构建过程中或构建完成之后,在质量保障和稳定性保障方面,我们还需要做哪些事情。

首先,我们回顾一下之前总结的这张流程图:

可以看出,在流水线构建过程中,我们尤其要重视以下3个方面的工作内容。

依赖规则限制

主要是对代码依赖的二方包和三方包做一些规则限制。比如,严格限定不允许依赖snapshot版本;不允许引入有严重漏洞的版本,如struts2的部分版本;检测jar包冲突,如我们常 用的netty、spring相关的包;限定某些软件包的最低版本发布,如内部提供的二方包,以确保版本收敛,降低维护成本。

过滤规则上,通过maven构建软件包过程中生成的dependency:list文件,将GroupID和ArtifactID作为关键字,与我们设定的版本限制规则进行匹配。

两个示例如下(真实版本信息做了修改):

检测jar包冲突:

[WARNING] 检测到jar包冲突: io.netty:netty-all, 版本: 4.0.88.Final, 当前使用:4.0.22.Final 限

定最低版本:

[WARNING] 检测到 mysql:mysql-connector-java, 版本 5.0.22, 版本不符合要求, 需要大于等于5.0.88 。旧版存在已知兼容性bug,导致连不上数据库, 请 在2018-01-15 00:00:00前升级完成, 否则将被禁止发布,如有疑问,请联系@发布助手

jar包依赖以及维护升级,通常是一件令我们比较头疼的事情,特别是在运行时出现的冲突异常,更是灾难性的。为了从技术角度更好地进行管理,我们需要做好隔离,这一点可以利 用JVM类加载机制来实现。

如果你有兴趣,可以在网上参考阿里的潘多拉(Pandora)容器设计资料,这里我们就不作详细介绍了。

功能测试

包括单元测试、接口测试、联调测试和集成测试。这里的每个测试环节起到的作用不同,联调测试和集成测试依赖的主要手段还是手工验证,所以这里我们分享下可以通过自动化手段完成的单元测试和接口测试。

这里主要用到的几个工具:

JUnit 和TestNG,分别做单元测试和接口测试;

Maven插件,maven-surefre-plugin,用来执行JUnit或TestNG 用例;

JaCoCo,分析单元测试和接口测试后的代码覆盖率;

Jenkins,自动化测试任务执行,报表生成和输出,与Maven、JUnit、Gitlab这些工具结合非常好。

关于上述这几种工具,我在此就不展开详细介绍了,你可以自行上网查询和学习。

下面,我们分析一下功能测试中的两个重要环节:单元测试和接口测试。

单元测试,由开发完成测试用例的开发,对于需要连接DB的用例,可以用DBUnit这样的框架。用例的自动执行,每次代码开发完成,开发执行mvn test在本地进行自测通过,然 后提交到Gitlab。可以在Gitlab中设置hook钩子,和回调地址,提交的时候在commitMsg增加钩子标识,如unitTest ,这样提交后就触发回调自动化单元测试用例执行接口,确保提交后的代码是单元测试通过的,最终可以通过JaCoCo工具输出成功率和代码覆盖率情况。

接口测试,用例编写上使用TestNG ,这个测试框架相比JUnit功能更全面,也更灵活一些。但是过程上与单元测试类似,当然也可以不通过hook方式出发,可以通过手工触发进行 测试。

上述自动化测试环节结束,软件包就可以发布到我们之前说的项目测试环境或集成测试环境进行功能联调和测试了,这时就需要部分人工的介入。

非功能测试

在功能验证的同时,还需要并行进行一些非功能性验证,包括安全审计、性能测试和容量评估 。分别介绍如下:

安全审计,由安全团队提供的源代码扫描工具,在构建的同时,对源代码进行安全扫描,支持Java和PHP语言。可以对源代码中的跨站脚本、伪造请求、SQL注入、用户名密码等 敏感信息泄露、木马以及各类远程执行等常见漏洞进行识别,对于高危漏洞,一旦发现,是不允许构建出的软件包发布的。而且实际情况是,不审不知道,一审吓一跳,我们前面 几次做代码扫描时,各种漏洞触目惊心,但是随着工具的支持和逐步改进,基本已经将这些常见漏洞消灭在萌芽状态。

下面是扫描结果的简单示例(目前扫描工具已经开源,请见文末链接):

 性能和容量压测,主要针对核心应用,进行发布前后的性能和容量比对,如果出现性能或容量差异较大,就会终止发布。关于这一点,我在后面稳定性保障的文章中会详细介绍 到。这个验证工作,会在预发或Beta环境下进行验证,因为这两个环境是最接近线上真实环境的。

下图是一张发布前后的效果比对示意图,正常情况下,性能曲线应该是基本重叠才对,不应该出现较大的偏差。

最后

到这里,我们稍作一个总结。

关于持续交付中的流水线模式,我们在前面两期文章以及本期的分享中,相对完整地介绍了从需求分解开始,到代码提交、软件构建,再到功能和非功能测试验证的整个过程。这个过程就是我们常说的持续集成。

之所以我没有在一开始引入这个概念,是因为,如果我们将注意力集中到这一过程中具体的动作和问题上,会更有利于我们理解,而不是一开始就被概念性的术语和框架束缚住。

流水线模式功能测试和非功能测试的整个过程可以总结如下:

同时,我们在上面持续集成的过程中,要基于前面介绍的各类环境和基础配置管理,比如功能验证就需要在线下环境中的开发环境、项目环境以及集成测试环境上进行验收。 而非功能验证的性能和容量评估,就需要在线上环境里的预发或beta环境中完成。这里就已经涉及到了软件的部署发布。 下一期文章,我将分享线上发布的整个过程,并对整个持续交付体系内容做一个收尾。欢迎你留言与我讨论。 如果今天的内容对你有帮助,也欢迎你分享给身边的朋友,我们下期见!

附:源代码安全审计工具 https://github.com/wufeifei/cobra

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网课查题接口使用方法

网课查题接口使用方法 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点…

Hadoop面试题汇总-20221031

Hadoop面试题汇总 HDFS部分 1、请描述HDFS的写流程。 答: 首先由客户端向 NameNode 发起文件上传请求,NameNode 检查文件要上传的目录,并鉴权。如果上传用户对此目录有权限,则允许客户端进行上传操作。客户端接收到允许指令后&…

本科毕业论文内容必须有国内外文献综述吗?

不知不觉间整个暑假变过去了,现在大部分的大学生都已经开学了。2023届毕业的学生现在也开始借鉴毕业论文的选题工作。但是无论是现在正在选题的大四的同学们还是还在上大一大,二大三的同学们都对毕业论文这4个字有着天生的恐惧感。因为对于大多数人来说&…

阿里为何禁止在对象中使用基本数据类型

大家好,我是一航! 前两天,因为一个接口的参数问题,和一位前端工程师产生了一些分歧,需求很简单: 根据一个数值类型(type 取值范围1,2,3)来查询数据&#xff…

HTML+CSS+JavaScript七夕情人节表白网页【樱花雨3D相册】超好看

这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白…

pandas 基本数据

目录 1. pandas 简介 2. pandas 基本数据结构 2.1 Series 类型 2.1.1 索引-数据的行标签 2.1.2 值 2.1.3 切片 2.1.4 索引赋值 2.2 DataFrame 类型 1. pandas 简介 一般导入的形式:import pandas as pd 2. pandas 基本数据结构 python 的数据结构&#xff1a…

python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例

一、Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。 Scrapy使用了Twisted异步网络框架来处理网络通信&#xf…

Servlet篇 —— 我的第一个Servlet程序

☕导航小助手☕ 🍚写在前面 🍜一、Maven的介绍 🍱​二、第一个Servlet的创建 🍔🍔2.1 创建项目 🥩🥩​2.2 引入依赖 🦪🦪​2.3 创建目录 🍣🍣2.4…

没想到GoFrame的gcache天然支持缓存淘汰策略

gcache提供统一的缓存管理模块,提供了开发者可自定义灵活接入的缓存适配接口,并默认提供了高速内存缓存适配实现。 先说结论 这篇文章通过结合商业项目的使用场景,为大家介绍了gcache的基本使用、缓存控制以及淘汰策略。 使用gcache做缓存处…

3分钟,快速上手Postman接口测试

Postman是一个用于调试HTTP请求的工具,它提供了友好的界面帮助分析、构造HTTP请求,并分析响应数据。实际工作中,开发和测试基本上都有使用Postman来进行接口调试工作。有一些其他流程的工具,也是模仿的Postman的风格进行接口测试工…

推荐 4 个开源工具

Hi,艾瑞巴蒂,晚上好!今天推荐 4 个登上 GitHub 热搜的开源项目,它们分别是:1. 炫酷的 UI 工具:glslViewer2. Textual3. ToolJet:开源的低代码开发框架4. Linux 命令大全搜索工具01炫酷的 UI 工…

程序人生:去了字节跳动,才知道年薪40W的测试有这么多?

今年大环境不好,内卷的厉害,薪资待遇好的工作机会更是难得。最近脉脉职言区有一条讨论火了: 哪家互联网公司薪资最‘厉害’? 下面的评论多为字节跳动,还炸出了很多年薪40W的测试工程师 我只想问一句,现在的…

vue3项目的创建,vite+vue3+ts(3)- router

vue3 有三种写法: 1.compostion API : 还是按照vue2.0写法 2.组合式API: 3. 组合式API 语法糖(setup), 语法简洁(推荐使用这个) 写法: 4. 在.eslintrc.cjs 或者 .eslintrc.js中配置代码,是这个…

聊聊计算机中的寄存器

文章目录前言数据寄存器(DR)地址寄存器(AR)程序状态寄存器(PSW)累加寄存器(AC)乘商寄存器(MQ)程序计数器(PC)指令寄存器(IR)MAR、MDR小结作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 前…

国内第一篇讲解减少卡顿的代码级详细文章

原文链接:原文链接 系统网站应用出现过卡顿,但却不知道如何优化。国内第一篇讲如何减少卡顿的代码级别详细文章,也是性能优化系列文章中的一篇,欢迎点赞、关注,也欢迎对其中的内容进行评论。 经常听人说,“…

配置CentOS为ssh免密码互相通信

文章目录配置CentOS为ssh免密码互相通信配置4台CentOS的集群配置4台CentOS为ssh免密码互相通信配置CentOS为ssh免密码互相通信 配置4台CentOS的集群 修改 /etc/sysconfig/network-scripts/ifcfg-ens33 文件,配置虚拟机 IP,以其中一个虚拟机为例&#x…

html实现贪吃蛇游戏(源码)

文章目录1.实现贪吃蛇1.1 界面设计1.2 界面动态效果1.3 界面主代码2.资源目录源码下载作者:xcLeigh 文章说明 html实现贪吃蛇源码,酷炫的界面效果,点击开始游戏后,通过键盘的上下左右按键,操作移动方向,代码…

@DateTimeFormat和@JsonFormat介绍

文章目录1.DateTimeFormat注解1.1DateTimeFormat注解简介1.2DateTimeFormat注解的功能1.3DateTimeFormat注解的注意点1.4DateTimeFormat功能演示1.4.1类型转换异常情况测试1.4.2接收url路径传参格式测试1.4.3接收Form-Data数据格式测试1.4.4接收JSON数据格式测试2.JsonFormat注…

python实现基于RPC协议的接口自动化测试

什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程序可…

Day1:垂直水平居中方式(至少6种,必须包含弹性盒子)

目录 垂直水平居中方式 方式1:弹f性盒子(1) (推荐) 方式2:弹性盒子(2) (推荐) 方式3:弹性盒子(3) 方式4:grid布局(1) (推荐) 方…