由来

记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:“南橘,CI/CD有没有研究过?”

我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我斩钉截铁的说:“老大,我不知道CI/CD是个啥。”

老大当即对诚实的我进行了一顿夸耀,并且高兴地奖励我回去研究CI/CD的机会,并且告诉我,我们team的ScrumMaster马上要入职了,加下来的工作会采取持续集成(CI)和持续交付( 持续部署)(CD) 的模式。

没过几天,新的ScrumMaster(就叫他S哥)就来了,项目也准备开始了。经过前期对需求的反复熟悉,我一下子就新建了好几个工程文件,正准备摩拳擦掌展露自己的实力的时候,S哥赶紧拦住了我:“不急,我们先玩一个游戏”。

接下来,S哥组织了整个Team成员对水果从口感、大小、外形、方便程度等各个方面进行打分,并且只要有人的分数与平均分不一致,就需要阐述自己的理由。这个方法很棒,一边让我们知道了各个同事的口味,一边也让我们理解了实现CI/CD中的重要前提:任务拆分

任务拆分

举个例子,在进行CI/CD的过程中,有一项任务是每天的例会(Daily meetings.)。大家快速交代自己昨天任务的完成情况,如果有问题,就在这里提出来,寻找相应的支持或者共同探讨。一方面可以提高工作的效率,另一方面也大大减少了划水摸鱼的情况。而要实现每天都有能分享的东西而不是发表一些类似于“昨天写代码,今天写代码,明天还是写代码”的发言,任务拆分就非常重要了。

在一个API的前期开发中,大体上可以分为:

  • 1、项目git搭建
  • 2、技术文档编写
  • 3、代码编写
  • 4、测试用例编写
  • 5、unitTest
  • 6、Sit环境搭建
  • 7、代码review
  • 8、jenkins自动集成环境搭建
  • 9、AC校验
  • 10、上下游联调
  • 11、auto测试搭建
  • 12、集成校验搭建
  • ...

当然,真正开发的时候可划分的任务会更加细致与更加贴近业务。

这个时候,之前玩游戏建立起的默契就可以放在这里对任务进行打分了。比如,我们统一以“项目git搭建”为基准点1分,以“代码review”为基准点8分,高于8分的任务继续拆分,比如代码编写这个环节大家给出了13分,那么按照斐波那契额数列的就需要拆分成5分和8分两个任务,并分配给相应的开发人员进行开发。

至此,将一个周期内所有需要进行的工作拆分成不同分值的任务,再根据前几个周期的完成情况合理的规划未来每个周期可以完成的任务。这样,通过任务拆分,对于项目组的开发能力就有了一个合理的评判标准,不会因为任务过多导致加班加点,也不会因为任务太轻导致疯狂摸鱼,并且为更好更快的发布产品,实现敏捷开发打下了基础。

敏捷开发

CI/CD就是实现敏捷开发的一种方式

什么是敏捷开发?我们都知道,互联网行业卷,互联网行业快,今天出需求,明天就上线是一种常态,而敏捷开发就是推动这个常态形成的助力。

敏捷开发的核心就是拥抱变化快速迭代

敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。

用一个广为流传的图片来体现敏捷开发和传统开发模式的区别:

那我们知道了什么是敏捷开发,也就知道CI/CD的方向是什么了。

CI/CD

编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署

通过这张图,我们可以看到三者拥有不同的自动化交付周期。

那么,所谓的持续集成持续交付(持续部署) 究竟是什么呢?

持续集成是一种软件开发实践,目的是希望团队中的成员频繁地将代码合并到代码仓库的主干分支上,并且一旦代码成功合并,系统就会通过自动构建应用并运行不同级别的自动化测试来验证这些更改,从而更早更快地将问题暴露出来。将传统开发模式中经常会出现一堆bug的代码集成阶段分散在每个工作日中,有效地降低了bug修复的难度和时间。

持续交付持续集成的延伸,将集成后的代码部署到指定环境仓库之中(一个可随时部署到生产环境的代码库),并且经过一系列的自动化流程。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。

持续交付经常容易与持续部署混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中。持续部署持续交付的最高阶段。

CI/CD提供了一个优秀的 DevOps 环境,对于整个团队来说,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。而我们,作为未来的一部分,也要积极地学习新的技术与开发模式,积极地拥抱未来。

有需要的同学可以加我的公众号,以后的最新的文章第一时间都在里面,也可以找我要思维导图

【进阶之路】持续集成、持续交付与持续部署(CI/CD)的更多相关文章

  1. Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 【持续集成与交付快速入门必备】

    Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 [持续集成与交付快速入门必备]

  2. 容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付

    容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...

  3. 容器镜像服务 联手 IDE 插件,实现一键部署、持续集成与交付

    容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...

  4. GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署

    预期目标 源代码管理 借助GitLab实现源代码托管,私有化部署版本,创建项目,创建用户组,分配权限,项目的签入/牵出等. 自动化部署 源代码产生变更时(如签入),自动化编译并发布到指定服务器中部署, ...

  5. 持续集成工具之Jenkins安装部署

    一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...

  6. 持续集成之应用k8s自动部署

    持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...

  7. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  8. Android Studio 集成 TFS,实现安卓移动开发的持续集成和交付(DevOps)

    目录 1 集成TFS系统.... 1.1 概述.... 1.2 安装TFS插件.... 1.2.1 在线安装方式.... 1.2.2 离线安装方案.... 1.3 常见操作.... 1.3.1 新建G ...

  9. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  10. 接口自动化测试持续集成--Soapui接口功能测试持续集成

    Soapui接口功能测试持续集成,需要先安装好maven和jenkins,maven和jenkins安装和系统环境配置比较简单,在这里不做叙述.   1.Soapui保存的工程文件 soapui工程保 ...

随机推荐

  1. Pdb— Python的调试器

    参考:Pdb- Python的调试器 pdb 模块定义了一个交互式源代码调试器,用于 Python 程序.它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上 ...

  2. Python的round()函数与数学的四舍五入的区别

    print(round(0.5))>>0print(round(1.5))>>2print(round(2.5))>>2整数部分为偶 小数为0.5 向下取整 0也是 ...

  3. 文件上传之WAF绕过及相安全防护

    文件上传在数据包中可修改的地方 Content-Disposition:一般可更改 name:表单参数值,不能更改 filename:文件名,可以更改 Content-Type:文件 MIME,视情况 ...

  4. 代码部署:使用 nginx 代理到云服务器 ( windows 系统)

    在部署之前我们首先要了解什么是nginx,它又可以做什么 Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,00 ...

  5. Adaptive AUTOSAR 学习笔记 14 - 车辆诊断

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf.作者:Zijian/TENG 原文地 ...

  6. Run Shell Commands in Python

    subprocess.call This is the recommended way to run shell commands in Python compared with old-fashio ...

  7. shell——sed编辑器

    目录 一.sed编辑器 1.1.sed编辑器工作流程 读取: 执行: 显示: 1.2.格式 1.3.常用选项 1.4.常用操作 1.5.替换 一.sed编辑器 sed是一种流编辑器,流编辑器会在编辑器 ...

  8. 【笔记】Jupyter notebook 高级 魔法命令

    魔法命令 %run 可以调用自己编写的代码 代码内容 使用结果 测试时间有%timeit,%time %timeit 测试时间(生成表达式的逻辑) 测试次数是可以不定义的,有系统自己决定 算法复杂度可 ...

  9. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

  10. Linux 进程间传递文件描述符

    文章目录 文件描述符 文件数据结构 共享文件 UNIX域socket实现传递文件描述符 进程间传递打开的文件描述符,并不是传递文件描述符的值.先说一下文件描述符. 文件描述符 对内核来说,所有打开的文 ...