项目开展CICD的实践探路 | 京东物流技术团队

news2025/1/18 12:02:27

本文介绍了作者对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 转载请注明来源

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

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

相关文章

【PHP】PHP开发教程-PHP开发环境安装

1、PHP简单介绍 PHP(全称:Hypertext Preprocessor)是一种广泛使用的开放源代码脚本语言,特别适用于Web开发。它嵌入在HTML中,通过在HTML文档中添加PHP标记和脚本,可以生成动态的、个性化的Web页面。 PHP最…

Java小项目|拼图小游戏|黑马

项目技术需求 Java基础 基本if、forio流File集合JFrame【看得懂就行】 项目素材以及打包exe: 链接:https://pan.baidu.com/s/1rPazJezTwS9O6e8BoYNIYA?pwd6666 项目运行截图 项目来源 哔哩哔哩-黑马程序员上 哔哩哔哩-黑马程序员下 项目介绍&…

mac电脑免费垃圾清理软件有哪些?CleanMyMac好用不好用?

CleanMyMac是一款功能强大的mac垃圾清理软件,它可以帮助我们快速扫描和删除mac上的垃圾文件,释放磁盘空间,提升系统速度。本文将为你介绍CleanMyMac这款mac垃圾清理软件,以及CleanMyMac怎么关闭开机启动。 mac垃圾清理软件有很多…

SAP 资产屏幕增强(AS01/AS02/AS03)

导语:最新需要在资产屏幕上增加增强字段(效果图在最后),下面分享一下实现过程。 一、在表中增强字段 本次增强的是【资产主数据->源】中的字段,选择储存在ANLU表中。 二、创建屏幕 在函数组XAIS中创建屏幕9001 在…

unity 模型显示在UI上 并交互(点击、旋转、缩放)

1.在Assets创建 Render Texture(下面会用到),根据需要设置Size 2.创建UIRawImage,并把Render Texture赋上 3.创建相机,如下图: 4.基本UI的准备工作完成,剩下的就是代码了,值得一提&a…

qt 实现音视频的分贝检测系统

项目场景: 目前的产品经常播放m3u8流,有的视频声音正常,有的视频声音就偏低,即使放到最大音量声音也是比较小,所以就产生了某种需求,能否自动感知视频声音的大小,如果发现声音比较小的情况&…

vue3项目初始

yarn add types/node -D是这个 下面 少到了S 这一步 就是 配置配置 src

高通 A12 设置-存储 存储总大小显示不正确问题

总存储大小计算原理: 系统获取存储大小是通过获取”/system”和”/data” 两个Directory 的和来计算的,即Environment.getDataDirectory().getTotalSpace() Environment.getRootDirectory().getTotalSpace() 问题一 :实际存储大小大于等于1…

网安周报|国防承包商Belcan泄露了带有漏洞列表的管理员密码

1.国防承包商Belcan泄露了带有漏洞列表的管理员密码 网络新闻研究团队发现了一个开放的 Kibana 实例,其中包含有关 Belcan、其员工和内部基础设施的敏感信息。Belcan 是一家政府、国防和航空航天承包商,提供全球设计、软件、制造、供应链、信息技术和数字…

企业在选择低代码平台时,应该注意哪些方面?

在 IT行业,“低代码”这个词可以说是近几年的热词了。低代码开发平台(Low-Code Platform)是一种新型的软件开发工具,它可以通过少量代码快速开发应用程序。通过采用低代码技术,开发者可以减少自己编写和测试应用程序的…

国际数字影像文创产业园开展企业法律的讲座

2023年8月18日14:30-16:10由成都市金牛区人民政府五块石街道办事处指导,国际数字影像文创产业园区、成都树观法律咨询服务有限公司主办,成都目莓商业运营管理有限公司协办的“法律讲座沙龙”活动在数媒大厦5楼共享会议室成功开展。 本次活动主题为“企业…

网络工程----小型网络配置1

此次作业设计: 硬件:二层交换机、三层交换机、路由、服务器、pc 配置知识:dhcp, dns配置,vlan划分,不同vlan间通信,静态路由,Nat动态地址, nat server映射,acl 配置命…

海外ios应用商店优化排名因素之评级与评论

评分显示在搜索结果中,直接影响转化率,而评论可以在应用页面上看到,评级和评论是我们无法直接控制的因素。但是我们仍然可以通过了解用户的需求并兑现承诺来尝试改进它。 1、关于用户的评论。 抱怨的用户在讲述某个问题时总是会给出最好的反…

Keil编译告警 warning: #1-D: last line of file ends without a newline

如题所示,Keil编译的时候,如果遇到了这个问题,就是文件最后一行并不是一个新行结尾。这个问题不影响编译结果,但是强迫症就受不了。 原因是源文件最后一行可能空出来了,但是有空格,如下所示: 这…

ACL2023 Prompt 相关文章速通 Part 1

Accepted Papers link: ACL2023 main conference accepted papers 文章目录 Accepted PapersPrompter: Zero-shot Adaptive Prefixes for Dialogue State Tracking Domain AdaptationQuery Refinement Prompts for Closed-Book Long-Form QAPrompting Language Models for Lin…

亚马逊评论后多久显示?有没有快速留评的方法?

通常情况下,亚马逊上的产品评论会在提交后的一到两天内显示出来。然而,实际的显示时间可能会因多种因素而有所不同,包括评论审核时间、产品销量、亚马逊服务器负载等等。在某些情况下,评论可能会更快地显示出来,而在其…

Ubuntu 22.04.3 LTS 维护更新发布

导读近日消息,Canonical 今天发布了代号为 Jammy Jellyfish、长期支持的 Ubuntu 22.04 第 3 个维护版本更新,距离上个版本相隔 6 周时间。 Ubuntu 22.04.3 LTS 最大的亮点在于内核升级到 Linux Kernel 6.2,此外 Mesa 图形堆栈也升级到 23.0.…

徐庆臣(黑客洗白者)个人介绍

徐庆臣(黑客洗白者),具备10年以上研发、渗透测试和网络信息安全领域从业经验,具有较强的网络安全管理、技术实战项目经验。曾就职于新浪、用友等互联网知名企业,并担任项目经理和安全技术总监等负责人角色,…

Modelica由入门到精通—为什么要学习Modelica语言

1.为什么要学习Modelica语言 本人正在研究Modelica 多领域统一建模仿真语言,特此做学习入门介绍,希望可以帮助需要的小伙伴。 文章目录 1.为什么要学习Modelica语言一、背景二、系统建模与仿真2.1 系统仿真与系统模型2.2 仿真价值与可靠性 三、物理建模…

kettle开发-Day42-远程执行作业

目录 前言: 一、远程执行 1、先看定义 2、前置条件 2.1网络畅通 2.2数据库DB连接一致 二、实战案例-Windows 1、初始配置-被远程端 1.1启动carte服务 1.2cmd 命令启动carte服务 2、初始化-远程端 3、实际应用 3.1、错误案例 3.2、正确案例 三、总结 前言&…