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

01

我的持续集成全流程

今年一直在开发我司的一个核心业务系统,一个还未上线的产品开发阶段,其中后端采用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节点的负载压力。

02

ASP.NET Core CI部分

我的后端微服务是基于ASP.NET Core开发的,采用了容器化部署至Linux服务器,之前有过一篇详细的文章介绍过《基于Jenkins Pipeline的ASP.NET Core持续集成实践》。

  

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

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

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

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

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

03

ASP.NET Core CD部分

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

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

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

04

RobotFramework AT部分

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

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

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

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

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

05

小结

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

你点的每个赞,我都认真当成了喜欢

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

  1. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署,因此这里总结一下. 一.关于持续集成与Jenkins Pipeline ...

  2. 基于Jenkins+git+gradle+pgyer的android持续集成

    前段时间搞了下CI持续集成工具,这里总结一下:供需要的朋友参考,错误之处还请指出,与君共勉. 主要步骤如下: 1. jenkins 安装配置 2.打包环境配置 3.系统配置及插件管理 4.新建项目.b ...

  3. 记录一次Monkey测试全流程

    记录一次Monkey测试全流程 1.检查设备连接 ZHR:~ zc$ adb devices List of devices attached JPF4C19123011893 device 2.查看 ...

  4. 【游戏音效】Unity集成Wwise并进行开发的全流程教程(一)准备工作

    集成教程: [游戏音效]Unity集成Wwise并进行开发的全流程教程(二)Wwise项目 [游戏音效]Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity 前言 Unity有自己的 ...

  5. 【游戏音效】Unity集成Wwise并进行开发的全流程教程(二)Wwise项目

    集成教程: [游戏音效]Unity集成Wwise并进行开发的全流程教程(一)准备工作 [游戏音效]Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity 前言 这一篇章大致讲一下Wwi ...

  6. MMSegmentation 训练测试全流程

    MMSegmentation 训练测试全流程 1.按照执行顺序的流程梳理 Level 0: 运行 Shell 命令: Level 1: 在 tools/train.py 内: Level 2: 转进到 ...

  7. 【游戏音效】Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity

    集成教程: [游戏音效]Unity集成Wwise并进行开发的全流程教程(一)准备工作 [游戏音效]Unity集成Wwise并进行开发的全流程教程(二)Wwise项目 前言 这一篇章是Unity接入Ww ...

  8. Jenkins与Docker的持续集成实践

    本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...

  9. 《持续集成实践指南》第2章 持续集成环境搭建Jenkins+Gitlab+Gerrit

    开发环境: 服务器:Ubuntu Server 20.04 2.1简介 Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件 ...

最新文章

  1. 谷歌量子霸权论文;13项NLP任务夺冠的小模型ALBERT
  2. MIT 6.828 JOS学习笔记12 Exercise 1.9
  3. Kubernetes 1.6新特性
  4. Linux 信号量 生产者消费者小例题
  5. 解决ModuleNotFoundError: No module named ‘_curses‘错误
  6. power bi自定义地图_如何使用自定义形状图在Power BI中创建地理图
  7. kernel笔记——库文件与系统调用
  8. 【新模板推荐】目标军令状、假期通知书…签名确认仪式满满
  9. html指南针绘制,Fireworks绘制指南针详解
  10. 分享十一个学习css的小游戏,快来下载吧!
  11. 骑士问题-BFS求解
  12. 华为q1设置虚拟服务器,华为路由Q1上网设置【图文】教程 | 192路由网
  13. Spring Boot网上图书商城
  14. 利用虚拟机virtualbox配置智汀家庭云,让米家设备连接Homekit
  15. 学习笔记(12):A110测试-测试课程申请22
  16. 用Hadoop分析金庸人物关系网-实验报告
  17. linux下的SAMBA服务------SMB协议
  18. Mac 应用中支持Dark Mode(深色模式)
  19. 计算机中遇到的问题英语,电脑故障英语对话
  20. 爬虫(八十八)lxml库的用法

热门文章

  1. Facebook 如何管理150亿张照片
  2. 据廖雪峰python3教程----python学习第十三天
  3. 光纤熔接过程详细说明
  4. MongoDB 3.0 新增特性一览
  5. 上海女白领吃火锅碰瓷,支付宝口碑居然真的要赔?
  6. SSH连接linux时,长时间不操作就断开的解决方案
  7. iOS 集合的深复制与浅复制
  8. SAP项目文档 清单 考核标准
  9. C#对象映射器之Mapster
  10. Web使用热敏打印小票(IE环境)