【进阶之路】持续集成、持续交付与持续部署(CI/CD)
由来
记得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)的更多相关文章
- Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 【持续集成与交付快速入门必备】
Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 [持续集成与交付快速入门必备]
- 容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付
容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...
- 容器镜像服务 联手 IDE 插件,实现一键部署、持续集成与交付
容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...
- GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署
预期目标 源代码管理 借助GitLab实现源代码托管,私有化部署版本,创建项目,创建用户组,分配权限,项目的签入/牵出等. 自动化部署 源代码产生变更时(如签入),自动化编译并发布到指定服务器中部署, ...
- 持续集成工具之Jenkins安装部署
一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...
- Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布
环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...
- Android Studio 集成 TFS,实现安卓移动开发的持续集成和交付(DevOps)
目录 1 集成TFS系统.... 1.1 概述.... 1.2 安装TFS插件.... 1.2.1 在线安装方式.... 1.2.2 离线安装方案.... 1.3 常见操作.... 1.3.1 新建G ...
- 持续集成工具Jenkins安装、部署、使用
本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...
- 接口自动化测试持续集成--Soapui接口功能测试持续集成
Soapui接口功能测试持续集成,需要先安装好maven和jenkins,maven和jenkins安装和系统环境配置比较简单,在这里不做叙述. 1.Soapui保存的工程文件 soapui工程保 ...
随机推荐
- (JAVA1)学习,复习的好帮手
学习准备:博客 博客,英文名Blog,它的正式名称为网络日记. 为什么要写博客 我们学习任何东西都需要总结和思考.有时候我们一直在赶路,却忘了放慢脚步 提升文笔组织能力 提升学习总结能力 提升逻辑思维 ...
- 大数据学习(10)—— Hive进阶
前面提到了Hive的知识点非常零散,我不知道该怎么把这些知识点分类,跟SQL关系没那么大的就放在这一篇吧. Hive Serde 参考Hive Serde Serde是啥 Serde是序列化和反序列化 ...
- 「必知必会」最细致的 ArrayList 原理分析
从今天开始也正式开 JDK 原理分析的坑了,其实写源码分析的目的不再是像以前一样搞懂原理,更重要的是看看他们编码风格更进一步体会到他们的设计思想.看源码前先自己实现一个再比对也许会有不一样的收获! ...
- Vue-Router 详细解析学习
首先还是先创项目 然后选择vue-router 再创建 再敲代码学习前,我们先了解什么是路由? 路由有一个非常重要的概念就是路由表: 本质就是一个映射表,决定数据的指向. 我们生活中常常听到的路由器, ...
- Java基础——类型转换注意事项及常见问题
类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用类型转换 低------------------------------------------------------------ ...
- RHCSA_DAY04
软连接与硬连接 Linux中的链接文件类似于windows中的快捷方式 软连接特点:软连接可以跨分区,可以对目录进行链接,源文件删除后,链接文件不可用 软连接命令格式:ln -s 源文件路径 目标路 ...
- 高楼扔鸡蛋问题(鹰蛋问题) POJ-3783
这是一道经典的DP模板题. https://vjudge.net/problem/POJ-3783#author=Herlo 一开始也是不知道咋写,尝试找了很多博客,感觉有点领悟之后写下自己的理解. ...
- 客户端连接mysql数据库反应慢
远程客户端连接MysqL数据库太慢解决方案 局域网客户端访问mysql 连接慢问题解决 编辑mysql配置文件 # vi my.conf [mysqld] skip-name-resolve 重启my ...
- 【笔记】偏差方差权衡 Bias Variance Trade off
偏差方差权衡 Bias Variance Trade off 什么叫偏差,什么叫方差 根据下图来说 偏差可以看作为左下角的图片,意思就是目标为红点,但是没有一个命中,所有的点都偏离了 方差可以看作为右 ...
- SQL 练习14
查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 SELECT Student.SId,Student.Sname,t.不及格课程数,t.平均成绩 from Student, (SELECT ...