您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
项目开展CICD的实践探路
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
项目开展CICD的实践探路
自猿其说Tech
2022-07-12
IP归属:未知
114520浏览
测试
### 1 前言 基于公司Bamboo、EOS,SonarQube平台,在项目中开展CICD持续集成与部署。介绍CICD开展的场景,项目中的实际应用,以及后续规划。 ### 2 CICD基础概念 CICD 是持续集成(Continuous Integration)和持续部署(Continuous Deployment)简称。指在研发过程中自动执行一系列脚本来降低开发引入 bug 的概率,在新代码从开发到部署的过程中,尽量减少人工的介入。 CICD 核心:持续集成、持续部署、持续交付。 ![](//img1.jcloudcs.com/developer.jdcloud.com/a2458442-839e-4a2c-ba80-6fd586e2095620220712151002.png) ###### CI:Continuous Integration,表示持续集成。 指在向远程仓库 push 代码后,在这次提交合并入主分支前进行一系列测试,构建等流程。 假设现在有个应用的代码存储在 仓库上,每天开发都会 push 很多次提交,针对每次 push,你可以创建一系列脚本进行自动测试,降低往应用里引入错误的概率。它可以应用在包括开发分支在内的多个分支上。 持续集成过程中很重视自动化测试验证结果,以保障所有的提交在合并主线之后的质量问题,对可能出现的一些问题进行预警。 ###### CD:Continuous Delivery,表示持续交付。 指在完成CI后可自动将已验证的代码发布到仓库。 持续交付的目标是拥有一个可随时部署到生产环境的代码库。 ###### CD:Continuous Deployment,表示持续部署。 指在持续集成的基础上更进一步,指将推送指仓库默认分支代码部署到特定环境。 通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,任何修改通过了所有已有的工作流就会直接和客户见面,只有当一个修改在工作流中构建失败才能阻止它部署到产品线。 ### 3 CICD的开展场景 #### 3.1 编译部署 实现代码提交之后的自动编译-部署过程,取代j-one上构建-部署手动操作 ![](//img1.jcloudcs.com/developer.jdcloud.com/23cbee9b-2405-42d4-8c21-68f79609bb1020220712151037.png) 内容: - 代码提交后的自动构建、自动部署、构建部署结果通知; 收益: - 去除Jone上代码构建完成后的手动部署操作中等待时间; #### 3.2 单元测试 开展基于Junit的单元测试 ![](//img1.jcloudcs.com/developer.jdcloud.com/cec001ba-8fa0-4aae-9403-743acb00299a20220712151105.png) 内容: - 针对后端代码,基于Junit编写单元测试脚本,开展单测,获取单测报告、jacoco代码覆盖率报告; 收益: - 提升测试覆盖率,提高代码质量; - 减少bug,快速定位bug; - 有限支撑重构; ### 3.3 代码扫描 实现基于SonarQube的代码质量检测 ![](//img1.jcloudcs.com/developer.jdcloud.com/48da9e13-e106-4729-9081-da0fa76c5e4c20220712151357.png) 实现基于EOS的代码质量检测 ![](//img1.jcloudcs.com/developer.jdcloud.com/ebc01827-8718-4b81-9b7d-064c4865892e20220712151410.png) 内容: - 实现基于SonarQube、或公司平台EOS的代码扫描检测; - 代码提交自动触发代码扫描,最终生成报告、结果通知; - 扫描结果计入项目质量,记录跟踪问题,直至问题闭环解决。 收益: - 代码质量检测的手段丰富; - 多层次的自动化测试,提升代码质量; - 自动触发测试执行,缩减测试等待时间,提高效率,实现无人值守; #### 3.4 自动化测试 实现基于Python、EasyOne、DeepTest、Jmeter 的自动化测试。 ![](//img1.jcloudcs.com/developer.jdcloud.com/5bc3105f-8cd4-45dd-8071-cd0c002a61dc20220712151447.png) 内容: - 实现基于SonarQube的代码质量检测; - 实现全链路各环节的自动化测试; - 代码提交自动触发测试执行、生成报告、报告通知; 收益: - 多层次的自动化测试,提升代码质量; - 自动触发测试执行,缩减测试等待时间,提高效率,实现无人值守; ### 3.5 全链路测试探索 将上述单个场景进行组合形成全链路测试场景; 代码提交触发链路自动运行,以及报告生成、邮件发送。 ![](//img1.jcloudcs.com/developer.jdcloud.com/1d6d2482-86b5-44b0-8f16-636e8510378c20220712151603.png) ### 4 项目实践 结合公司内部平台在实际项目中开展CICD。 ### 4.1 公司内部平台 **Bamboo ** Bamboo是京东自研的一套CI/CD流水线解决方案,覆盖软件开发的完整生命周期。 **EOS ** EOS是技术与数据中台自主研发的代码扫描系统,通过扫描分析代码,定位到工程中不规范的编码片段并给出修改建议,能有效监督约束开发人员统一编码习惯,减少因编码不规范引起的低级错误,提高代码可读性,提高团队协作效率。 **SonarQube** http://sonarqube.jd.com/ #### 4.2 项目实际应用 ###### 1)编译-部署 对Jone上高频构建部署分支进行在Bamboo上搭建流水线,实现: 代码提交-调用Jone的构建-调用Jone的部署-结果通知 ![](//img1.jcloudcs.com/developer.jdcloud.com/e66032b1-6fea-49dc-a3e4-6dc05921d12b20220712151654.png) 触发编译构建的几种方式: - 手动执行; - 代码提交触发执行; - 定时任务触发执行; - 级联其他流水线触发执行; 应用情况: - 组内所测试所覆盖都已部署相关流水线; - 支撑测试人员在所测项目中部署自动构建流水线,共计调用次数:364次。 ###### 2)单元测试 对后端项目开展单元测试,实现: 代码提交-maven构建-获取单测报告-结果通知 ![](//img1.jcloudcs.com/developer.jdcloud.com/f28dd663-278d-4a0a-9872-80155477eede20220712151743.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/da0928a5-13a9-4287-a2d2-0eca9d9328fe20220712151749.png) 应用效果: - 极大简化了获取单测报告的过程,通过简单的过程即可针对项目开展单测、执行单测、并获取单测结果; - 支撑超过8个项目部署单测流水线,JDL-CRM权限系统单测有效提升率:20% ###### 3)自动化测试 项目部署之后,开展自动化回归测试,用于项目上线前的回归测试,实现: 自动化测试-测试报告-测试结果通知 ![](//img1.jcloudcs.com/developer.jdcloud.com/d8a9b340-add9-4bcd-8541-a95b159e45fc20220712151926.png) 目前基于Python语言,依托Py第三方模块,实现脚本编写,集成到Bamboo平台,执行流水线,获取报告。 应用效果: - 负责在销服项目中开展上线前的UAT自动回归测试; ###### 4)代码扫描 基于公司搭建的SonarQube、EOS平台,开展代码扫描,实现: 代码提交-代码扫描-扫描报告-问题手工记录行云 ![](//img1.jcloudcs.com/developer.jdcloud.com/e777eb40-6036-4dc9-b2a1-536682d411e020220712152000.png) ### 5 后续规划 CICD过程数据与质量效能数据相结合。 基于DeepTest开展更多项目的自动化测试,集成到BamBoo平台。 代码扫描在项目中的应用。 ------------ ###### 自猿其说Tech-JDL京东物流技术与数据智能部 ###### 作者:陈维(西安CS测试小分队)
原创文章,需联系作者,授权转载
上一篇:Opencv系列之一:简介与基本使用
下一篇:mysql 最大建议行数2000w,靠谱吗?
相关文章
安全测试之探索windows游戏扫雷
Jmeter压测实战:Jmeter二次开发之JSF采样器实现
Laputa自动化测试框架介绍
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号