基于Jenkins的开发测试全流程持续集成实践

news2024/11/17 7:39:17

今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点。当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容器编排,以及通过阿里云K8S服务进行高效的云上托管,希望对各位童鞋有一点用。

目录

一、持续集成全流程介绍

二、ASP.NET Core CI流程部分

三、ASP.NET Core CD流程部分

四、RobotFramework AT流程部分

五、小结


一、持续集成全流程介绍

  今年一直在开发我司的一个核心业务系统,一个还未上线的产品开发阶段,其中后端采用ASP.NET Core + 一系列开源组件开发微服务并且部署在Linux Docker中,前端采用React + Flutter开发Web和App。采用了Jenkins作为CI工具,集成了一堆插件Plugin实现了初步的持续集成全流程。

  下图就是我最近整理的一个目前的持续集成全流程图:

  可以看出,在开发测试环境我有3个环境:

  (1)DEV环境:用于dev分支的前后端开发联调,有单独的数据库

  (2)MT环境:用于release分支(现阶段我直接用的master分支,产品上线后不可取)的测试进行集成测试,有单独的数据库

  (3)DEV-AT环境:用于dev分支的自动化接口测试环境,即专门拿来跑自动化接口脚本的环境,有单独的数据库

  针对CI服务器,在开发测试环境我有个2个节点:

  (1)master节点:用于持续集成和部署等一般性构建任务

  (2)slave-at节点:专门用于跑自动化接口测试脚本构建任务

  推荐在Jenkins中为不同类型的构建任务设置不同的label,这样可以绑定不同类型的构建任务至不同的Node上执行,从而减少高峰时期master节点的负载压力。

二、ASP.NET Core CI流程部分

  我的后端微服务是基于ASP.NET Core开发的,采用了容器化部署至Linux服务器,之前有过一篇详细的文章介绍过

  在Jenkins中提供了Pipeline方便地进行构建流水线,在我的实践中主要是通过开发人员的每一次Check-In到git,触发一个Webhook到Jenkins中从而使持续集成构建任务开始执行:

  从图中可以看出,其经历了中台微服务的编译和单元测试 及 BFF(Backend for Frontend)服务的编译和单元测试来保障代码质量,当然前提是有足够的单元测试作为保护层,这也需要开发人员花时间为每个服务接口(或者高价值的部分)写单元测试!

  如果构建任务中有一个Stage失败了,那么此构建任务则认为失败,会给开发团队和Leader发送邮件告警:

  此外,我们还使用了一个用于大屏显示构建状态的插件—Build Monitor,在我们工作区后方的电视屏上会显示各个构建任务的实时状态,如果有任务失败了会变为红色:

  并且,Build Monitor还会将推进不可靠代码的提交者名字(git账号名字)显示在屏幕中的构建任务里边,方便大家查看谁的锅:

三、ASP.NET Core CD流程部分

  经过CI部分,就可以初步认为提交的代码已经经过了初步的验证,这时会进入部署部分的构建任务,在我的流程里会有开发联调环境的部署及接口自动化环境的部署。当然,除了API的部署也有Web的部署,我们可以将其写到一个统一的Pipeline中也可以分开两个Pipeline来写。

  下图是我的一个API的部署构建任务,其中会经历中台微服务的部署及BFF服务的部署,当然也可以部署至多个服务器:

  这里说一下,由于我目前并没有采用任何的容器编排工具,所以这里的发布就只是单纯的将release文件覆盖之后然后将docker暂停和重启。这样做的缺点是没有充分利用镜像的优点,无法实现版本的有效管理(比如回退)。

四、RobotFramework AT流程部分

  对于一个产品来说,质量很重要,而保证质量的辅助手段就是充分的回归测试。自动化接口测试使得回归测试成为可以频繁触发,也就能及时发现提交的代码对已有接口功能的影响。我们的AT是根据重要的业务场景来写的,而且我们也觉得AT应该写在那些主要业务流程的接口上面,才能显示出它的价值,而且AT的编写也是不小的工作量。

  我们使用的是RobotFramework,开发语言是Python。在开发人员提交代码并发布到开发联调环境时,便会自动触发AT环境的部署,部署无误后就会触发AT任务的执行,AT执行无误后才会自动Merge dev分支的代码至稳定的测试分支,之后测试再选择是否发布最新的更改至测试环境进行验证bug fix。

  下图是基于RF的AT构建任务的执行结果:

  下图是该任务的具体的输出信息,我们可以看到每个用例的执行情况:

  由于我目前对这块了解不多,后续有机会了解多点后可以介绍一点我们在AT方面的实践和规范。

五、小结

  本文介绍了我目前团队所在使用的持续集成全流程及一些重要插件的使用,虽然还很不完善,但初步解决了我所在团队在集成和发布上的一些痛点。随着后续对K8S的学习的深入,我会逐步引入K8S进行微服务的容器编排以及持续集成的K8S化改造,希望到时再进行分享。

做为一名自动化软件测试,接下来我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名高级测试者需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

1、想学习却无从下手,该如何学习?
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

2、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

​ 3、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

从js中加载图片和Cannot read property ‘appendChild‘ of null 错误

先写一段代码如下&#xff1b; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title> </title><script>var imgnew Image();img.addEventListener("load",loadHandler);img.src"img/1.jpg"…

【JMeter】命令参数说明

jmeter -n -t xxx.jmx -l result.jtl 非GUI运行xxx.jml脚本写入xxx.jtl结果文件 jmeter -n -t xxx.jmx -l result.jtl -j run.log 非GUI运行xxx.jmx脚本写入xxx.jtl结果文件&#xff0c;日志记录到run.log jmeter -n -t xxx.jmx -R ip1:port1,ip2:port2 -l result.jtl 使用远…

详解 Redis 持久化之掌握 RDB ⽂件的格式,学习如何制作数据库镜像

本文带大家了解一下 Redis 数据一种持久化方式 RDB 的实现。包括 Redis 内存快照 RDB ⽂件的创建时机以及⽣成⽅法。可以让你掌握 RDB ⽂件的格式&#xff0c;学习如何制作数据库镜像。 RDB 创建的入口函数 Redis 创建 RDB 文件的函数有三个&#xff0c;分别是 rdbSave, rdbSa…

知识图谱-KGE-语义匹配-双线性模型-2017:ANALOGY

【paper】 Analogical Inference for Multi-relational Embeddings【简介】 本文是卡耐基梅隆大学的中国学者发表在 ICML 2017 上的工作&#xff0c;提出了 ANALOGY 模型&#xff0c;用于建模实体和关系的推理属性。这个模型应当也算是双线性模型中比较经典的一个了&#xff0c…

Erueka基本使用

SpringCloud Erueka基本使用 Erueka是微服务架构中&#xff0c;可以作为注册中心的技术实现&#xff0c;如下图所示 服务提供者&#xff1a;一次业务中&#xff0c;暴露接口给其它微服务调用&#xff0c;被其它微服务调用的服务。&#xff08;提供接口给其它微服务&#xff09…

一个超好看的音乐网站设计与实现(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

vue+vite的创建

1、创建vue3项目 yarn create vite效果&#xff1a; yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages...success Installed "create-vite3.2.1" with binaries:- crea…

接口管理测试繁琐复杂?何不试试这个神器

一、前言 作为一名测试从业者&#xff0c;深刻的明白接口测试在项目过程中是多么重要的一个环节。通过页面进行的UI测试会因为界面不稳定而导致用例维护非常困难。另外&#xff0c;在检查系统的安全性、稳定性上面也是尤为重要的环节&#xff0c;这些也是无法通过前端测试的&a…

Redis - Windows下载与安装

1.获取Redis在windows下的安装包 Windows版下载地址&#xff1a;https://github.com/microsoftarchive/redis/releases 选择Redis-x64-*.zip 2.解压zip文件与配置 2.1 选取目录 选取一个目录作为解压目录&#xff0c;这个目录就是你Redis程序所在位置&#xff0c;尽量找一…

【软件测试】师傅给我的测试新手“真理“宝典......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 熟悉你所测试的软件…

java学习day59(乐友商城)Vue入门

0.前言 前几天我们已经对后端的技术栈有了初步的了解、并且已经搭建了整个后端微服务的平台。接下来要做的事情就是功能开发了。但是没有前端页面&#xff0c;我们肯定无从下手&#xff0c;因此今天我们就要来了解一下前端的一些技术&#xff0c;完成前端页面搭建。 先聊一下…

【Redis】Redis实现分布式锁解析与应用(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

java版商城+Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买…

助农销售平台毕业设计,农产品销售管理系统设计与实现,毕业设计怎么写论文源码开题报告需求分析怎么做

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的多用户商城系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于java的springboot框架下开发&#xff1b;用户通过登录网站&#xff0c;查询商品&#xff0c;购买商品&#xff0c;下单&…

ElasticSearch-7.17支持两种客户端连接方式(RestHighLevelClient 和Elasticsearch Java API)

学习es时发现了一个大问题&#xff0c;学习的版本为7.8.0&#xff08;尚硅谷yyds&#xff09;&#xff0c;自己使用的是7.17.8&#xff0c;但是最新的版本已经是8.5X了&#xff08;心累&#xff0c;怎么升级这么快&#xff09;。 因为目前用的还是jdk1.8&#xff0c;所以就按照…

Blazor组件自做十二 : Blazor Pdf Reader PDF阅读器 组件

原文链接 [https://www.cnblogs.com/densen2014/p/16954812.html] Blazor Pdf Reader PDF阅读器 组件 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IChv1OZ2-1670428567016)(https://img.shields.io/nuget/v/BootstrapBlazor.PdfReader.svg?styl…

【YOLOX 论文+源码解读】YOLOX: Exceeding YOLO Series in 2021

目录前言一、整体网络架构二、改进点1.1、解耦头1.2、Anchor Free1.3、SimOTA三、源码解析3.1、Backbone3.2、Neck3.3、head3.4、预测&#xff1a;decode_outputs3.5、训练&#xff1a;get_losses3.5.1、准备工作&#xff1a;get_output_and_grid3.5.2、get_losses函数&#xf…

神操作!竟然有人用Python在Excel中画画,女神看了直呼震惊

十字绣大家都知道吧&#xff0c;今天咱们来玩个电子版的十字绣。 用 Python 读取图片的像素值&#xff0c;然后输出到 Excel 表格中&#xff0c;最终形成一幅像素画&#xff0c;也就是电子版的十字绣了。 准备 既然要读取图片&#xff0c;那就需要用到 Pillow 库&#xff0c…

做更真实的实验!艾美捷Caspase-1活性分析试剂盒方案

FLICA 是通过检测来评估细胞死亡的有力方法体外凋亡。免疫化学技术&#xff08;ICT&#xff09;FLICA 荧光标记的抑制剂与活性半胱天冬酶共价结合的CAspa酶1,2。FLICA测量细胞内的凋亡过程&#xff0c;而不是副作用&#xff0c;如磷脂酰丝氨酸的翻转&#xff0c;并消除假阳性的…

iOS视频编码实战VideoToolbox

需求 iOS中编码视频数据,一般情况而言一个项目仅需要一个编码器,不过有时特殊需求可能需要两个编码器同时工作.本例中实现了编码器类.仅通过指定不同编码器的枚举值就可以快速生成需要的编码器,且支持两个编码器一起工作. 实现原理: iOS中利用VideoToolBox框架完成视频硬编码…