【进阶之路】持续集成、持续交付与持续部署(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工程保 ...
随机推荐
- 1.4matlab矩阵的表示
1.4matlab矩阵的表示 矩阵的建立 利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔. 利用已建立好的矩 ...
- 使用分区助手转移windows 10系统出现黑屏boot manager报错问题。
问题原因: 在使用分区助手迁移windows 10到ssd中,设置完boot管理器后,出现黑屏问题, 经过长时间的搜索,发现在迁移系统的时候,只迁移了C盘的系统,没有连同msr引导 文件一同传过去,会 ...
- Hadoop (8088)未授权访问
cd /vulhub/hadoop/unauthorized-yarn 加速下载环境 sudo vim /etc/docker/daemon.json 添加 {"registry-mirro ...
- solr(CVE-2019-0193)远程命令执行
影响版本 Apache Solr < 8.2.0 并且开启了DataImportHandler模块(默认情况下该模块不被启用) 安装 重启daoker 更新配置文件 systemctl dae ...
- Python的round()函数与数学的四舍五入的区别
print(round(0.5))>>0print(round(1.5))>>2print(round(2.5))>>2整数部分为偶 小数为0.5 向下取整 0也是 ...
- 手脱UPX壳的方法
0X00 了解 upx UPX作为一款元老级PE加密壳,在以前的那个年代盛行,著名病毒[熊猫烧香]就是使用这款加密壳. 0X01 单步跟踪法 就是使用ollydbg加载程序后,按F8进行单 ...
- XCTF-simple unpack
题目提示这是一个加壳的二进制文件,拖到exeinfope,是UPX壳. 这里我们用linux命令upx -d脱壳. 脱完壳之后拉入ida64中分析.找到main函数,可以看到这一句可以是输出flag的 ...
- 浅谈C#取消令牌CancellationTokenSource
前言 相信大家在使用C#进行开发的时候,特别是使用异步的场景,多多少少会接触到CancellationTokenSource.看名字就知道它和取消异步任务相关的,而且一看便知大名鼎鼎的Cancella ...
- Python语言系列-05-模块和包
自定义模块 #!/usr/bin/env python3 # author:Alnk(李成果) # 为什么要有模块?(内置函数不够用) # 和操作系统打交道 # 和python解释器打交道 # 和时间 ...
- 从零开始实现简单 RPC 框架 4:注册中心
RPC 中服务消费端(Consumer) 需要请求服务提供方(Provider)的接口,必须要知道 Provider 的地址才能请求到. 那么,Consumer 要从哪里获取 Provider 的地址 ...