写点什么

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

  • 2023-08-25
    北京
  • 本文字数:2067 字

    阅读完需:约 7 分钟

项目开展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 转载请注明来源

发布于: 刚刚阅读数: 3
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
项目开展CICD的实践探路 | 京东物流技术团队_CI/CD_京东科技开发者_InfoQ写作社区