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

项目开展CICD的实践探路的更多相关文章

  1. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

  2. 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比

    上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...

  3. 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果

    上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...

  4. 3、大型项目的接口自动化实践记录----开放API练习

    开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...

  5. 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介

    1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...

  6. 1、大型项目的接口自动化实践记录--robotframework环境搭建

    因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...

  7. 项目中docker swarm实践

    docker swarm 集群服务通信 前置要求 服务需要在同一个docker swarm集群中 服务需要处于同一个overlay网络上 服务需要暴露容器端口 有2个以上服务名不同的服务 服务部署流程 ...

  8. PMP备考_第五章_项目范围管理_实践思考

    项目范围管理 前言 今天学习项目范围管理的内容,深切的感受到了原单位在项目管理方面存在的问题,今天在这里做一个总结,既相当于对项目范围的一个学习整理,也相当于自己对项目实践过程中存在问题的一个思考. ...

  9. 基于jenkins+kubernetes的cicd流程实践一:环境搭建及方案原理实现

    1.基础环境:Centos7.9,kubernetes:v1.21.5 node-1@112(master):docker,containerd,harbornginx(80),git,etcd no ...

  10. JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架

     Grunt 是一个基于任务的 JavaScript 项目命令行构建工具,运行于 Node.js 平台.Grunt 能够从模板快速创建项目,合并.压缩和校验 CSS & JS 文件,运行单元测 ...

随机推荐

  1. 2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: 1) A,2,3,4....10,J,Q,K分别对应1到13这些数字,大小王对应0; 2) 游

    2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: A,2,3,4-10,J,Q,K分别对应1到13这些数字,大小王对应0; 游戏人数为2人,轮流 ...

  2. IBM小型机 - AIX6.1系统安装教程

    AIX6.1系统安装教程 由于工作原因,公司让我帮忙部署AIX小型机的系统,在各处找了很多教程,也请教了大佬协助(感谢大佬的帮助),下面以图文的形式总结了AIX 6.1系统的安装过程. 准备工作 硬件 ...

  3. .join()字符串操作函数

    join函数是一个字符串操作函数 str.join(item)str表示字符串(字符),item表示一个成员,注意括号里必须只能有一个成员,比如','.join('a','b')这种写法是行不通的 举 ...

  4. 如何从命令行启动 CST 软件?

    众所周知,CST 一贯以优良的界面友好性而著称,用户可以方便快捷的在其 windows 式的界面下进行建模.仿真及结果查看和处理等操作.然而,在某些特定情况下,也需要 CST 进行后台式的运行,比如需 ...

  5. js 关于 replace 取值、替换第几个匹配项

    〇.前言 在日常开发中,经常遇到针对字符串的替换.截取,知识点比较碎容易混淆,特此总结一下,仅供参考. 一.替换第一个匹配项 字符串替换 let strtest = "0123测试repla ...

  6. 代码随想录算法训练营Day5 数组、链表复习

    数组部分 数组最重要的思维方式是双指针的使用. 快慢指针 在进行元素移除和元素操作时会使用两个for循环嵌套,此时时间复杂度为O(n²).在for循环中通过双指针(快慢指针)的使用可以使时间复杂度将为 ...

  7. 如何基于G6进行双树流转绘制?

    1. 背景 业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达. 技术背景:在开发之前 ...

  8. 【Haxe】(二)字符串与变量的输入输出

    前言 每次学习一门新语言,各种手册和教程一上来就是讲变量如何定义,数据结构怎么用,很少有讲输入输出应该怎么写的.我比较喜欢先搞懂这部分,这让我感觉像是掌握了学习主动权,很能调动我的学习积极性.于是我的 ...

  9. 使用containerd从0搭建k8s(kubernetes)集群

    准备环境 准备两台服务器节点,如果需要安装虚拟机,可以参考<wmware和centos安装过程> 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 mas ...

  10. CKS 考试题整理 (10)-Dockerfile检测

    Task 分析和编辑给定的Dockerfile /cks/docker/Dockerfile(基于ubuntu:16.04 镜像), 并修复在文件中拥有的突出的安全/最佳实践问题的两个指令. 分析和编 ...