项目开展CICD的实践探路 | 京东物流技术团队
本文介绍了作者对CICD的理解以及在项目中开展CICD的几种场景,总结了每种场景实践的关键节点、带来的收益,以及结合具体项目开展的实际应用。读者可以借鉴本文中描述的场景,或借鉴文中提到的实践方式,在项目中开展CICD,为项目在持续集成部署上做具体的支撑。
1 前言
基于公司Bamboo、EOS,SonarQube平台,在项目中开展CICD持续集成与部署。介绍CICD开展的场景,项目中的实际应用,以及后续规划。
2 CICD基础概念
CICD 是持续集成(Continuous Integration)和持续部署(Continuous Deployment)简称。指在研发过程中自动执行一系列脚本来降低开发引入 bug 的概率,在新代码从开发到部署的过程中,尽量减少人工的介入。
CICD 核心:持续集成、持续部署、持续交付。
CI:Continuous Integration,表示持续集成。
指在向远程仓库 push 代码后,在这次提交合并入主分支前进行一系列测试,构建等流程。
假设现在有个应用的代码存储在 仓库上,每天开发都会 push 很多次提交,针对每次 push,你可以创建一系列脚本进行自动测试,降低往应用里引入错误的概率。它可以应用在包括开发分支在内的多个分支上。
持续集成过程中很重视自动化测试验证结果,以保障所有的提交在合并主线之后的质量问题,对可能出现的一些问题进行预警。
CD:Continuous Delivery,表示持续交付。
指在完成CI后可自动将已验证的代码发布到仓库。
持续交付的目标是拥有一个可随时部署到生产环境的代码库。
CD:Continuous Deployment,表示持续部署。
指在持续集成的基础上更进一步,指将推送指仓库默认分支代码部署到特定环境。
通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,任何修改通过了所有已有的工作流就会直接和客户见面,只有当一个修改在工作流中构建失败才能阻止它部署到产品线。
3 CICD的开展场景
3.1 编译部署
实现代码提交之后的自动编译-部署过程,取代j-one上构建-部署手动操作
内容:
- 代码提交后的自动构建、自动部署、构建部署结果通知;
收益:
- 去除Jone上代码构建完成后的手动部署操作中等待时间;
3.2 单元测试
开展基于Junit的单元测试
内容:
- 针对后端代码,基于Junit编写单元测试脚本,开展单测,获取单测报告、jacoco代码覆盖率报告;
收益:
- 提升测试覆盖率,提高代码质量;
- 减少bug,快速定位bug;
- 有限支撑重构;
3.3 代码扫描
实现基于SonarQube的代码质量检测
实现基于EOS的代码质量检测
内容:
- 实现基于SonarQube、或公司平台EOS的代码扫描检测;
- 代码提交自动触发代码扫描,最终生成报告、结果通知;
- 扫描结果计入项目质量,记录跟踪问题,直至问题闭环解决。
收益:
- 代码质量检测的手段丰富;
- 多层次的自动化测试,提升代码质量;
- 自动触发测试执行,缩减测试等待时间,提高效率,实现无人值守;
3.4 自动化测试
实现基于Python、EasyOne、DeepTest、Jmeter 的自动化测试。
内容:
- 实现基于SonarQube的代码质量检测;
- 实现全链路各环节的自动化测试;
- 代码提交自动触发测试执行、生成报告、报告通知;
收益:
- 多层次的自动化测试,提升代码质量;
- 自动触发测试执行,缩减测试等待时间,提高效率,实现无人值守;
3.5 全链路测试探索
将上述单个场景进行组合形成全链路测试场景;
代码提交触发链路自动运行,以及报告生成、邮件发送。
4 项目实践
结合公司内部平台在实际项目中开展CICD。
4.1 公司内部平台
Bamboo
Bamboo是京东自研的一套CI/CD流水线解决方案,覆盖软件开发的完整生命周期。
EOS
EOS是技术与数据中台自主研发的代码扫描系统,通过扫描分析代码,定位到工程中不规范的编码片段并给出修改建议,能有效监督约束开发人员统一编码习惯,减少因编码不规范引起的低级错误,提高代码可读性,提高团队协作效率。
4.2 项目实际应用
1)编译-部署
对Jone上高频构建部署分支进行在Bamboo上搭建流水线,实现:
代码提交-调用Jone的构建-调用Jone的部署-结果通知
触发编译构建的几种方式:
- 手动执行;
- 代码提交触发执行;
- 定时任务触发执行;
- 级联其他流水线触发执行;
应用情况:
- 组内所测试所覆盖都已部署相关流水线;
- 支撑测试人员在所测项目中部署自动构建流水线,共计调用次数:364次。
2)单元测试
对后端项目开展单元测试,实现:
代码提交-maven构建-获取单测报告-结果通知
应用效果:
- 极大简化了获取单测报告的过程,通过简单的过程即可针对项目开展单测、执行单测、并获取单测结果;
- 支撑超过8个项目部署单测流水线,JDL-CRM权限系统单测有效提升率:20%
3)自动化测试
项目部署之后,开展自动化回归测试,用于项目上线前的回归测试,实现:
自动化测试-测试报告-测试结果通知
目前基于Python语言,依托Py第三方模块,实现脚本编写,集成到Bamboo平台,执行流水线,获取报告。
应用效果:
- 负责在销服项目中开展上线前的UAT自动回归测试;
4)代码扫描
基于公司搭建的SonarQube、EOS平台,开展代码扫描,实现:
代码提交-代码扫描-扫描报告-问题手工记录行云
5 后续规划
CICD过程数据与质量效能数据相结合。
基于DeepTest开展更多项目的自动化测试,集成到BamBoo平台。
代码扫描在项目中的应用。
作者:京东物流 陈维
来源:京东云开发者社区 自猿其说Tech 转载请注明来源
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
解放双手!ChatGPT助力编写JAVA框架! | 京东云技术团队
亲爱的Javaer们,在平时编码的过程中,你是否曾想过编写一个Java框架去为开发提效?但是要么编写框架时感觉无从下手,不知道从哪开始。要么有思路了后对某个功能实现的技术细节不了解,空有想法而无法实现。如果你遇到了这些问题,看完这篇文章你也能用ChatGPT编写一个简单的JAVA框架。 构思清晰 首先,你需要明确你的框架要解决什么问题,具有什么特性。这将有助于ChatGPT更好的理解你的需求。 例如:我在一个前后端分离的需求中发现有太多的枚举类的描述需要给前端返回。传统的方式是后端根据枚举类的映射,每个枚举值编写代码映射成描述给前端返回。但这次需求需要给前端返回的枚举描述太多了。这让我和我的小伙伴们感觉无从下手。所以我就思考能否编写一个注解自动帮我们扫描这些枚举类,然后生成key和描述的map,最终放到容器中去呢? 解决问题:解决前后端分离过程中需要手动编写代码将枚举key的描述映射给前端。 特性:框架有一个注解,注解有三个字段name,key,和desc,修饰在枚举类上。框架需提供外部获取枚举map的接口。 与 ChatGPT 交流 启动 ChatGPT,向它讲述你的构想和需求。它可...
- 下一篇
【直播预告】eBPF 到底是可观测领域的神器 or 鸡肋?
当下,eBPF 无疑是最火热的技术之一,它为云原生环境下的网络、安全和可观测性解决方案提供了全新的思路。 作为一种无需入侵应用代码、直接向操作系统内核安全添加代码的革命性技术,eBPF 使得企业能够不依赖内核固有的指标数据,直接编写代码收集自定义数据,并生成可观测性指标和事件。这不仅将可观测性扩展到内核,还能够实现零插桩的应用代码可观测性,同时保证了运行安全和开销可控。于是,不少人认为 eBPF 是可观测领域的未来之星。 然而,也有人觉得,eBPF 的作用被夸大了。它并不是适合每个项目或生态系统的灵丹妙药 —— 仅限于 Linux 和它的最新内核。而且“沙箱程序也是有限制的”,通过限制程序可以访问的操作系统部分,功能也可能受到限制。因此 eBPF 只不过是可观测体系中的一个小补充罢了,并不是可观测领域的未来主要方向。 对此,你怎么看呢?在你的工作中,eBPF 技术是不可或缺的“神器”,还是能力有限的“鸡肋”?企业和个人开发者又该怎么选呢? 本期,OSCHINA【开源漫谈】特地邀请了 5 位业内具有代表性的专家,直播探讨一下,eBPF 到底是可观测领域的神器 or 鸡肋? 直播主题:e...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主