【进阶之路】持续集成、持续交付与持续部署(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工程保 ...
随机推荐
- spring 读取account-service中的值
account-service //main--resources--account-service.properties 文件位置 email.protocol=smtps email.host=s ...
- CC2B本地环境搭建步骤及部署问题解决
由于最近的项目是之前没接触过的netbeans+glassfish,记录一下最近在工作中搭建本地环境的步骤及遇到的一些问题解决方法: 1.配置java jdk 此过程中遇到一个问题就是在配置系统环境变 ...
- noip模拟29[简单的板子题](虽然我不会)
\(noip模拟29\;solutions\) 这次考试给我最大的伤害,让我意识到了差距 这场考试可以说是非常的简单,就是简单到,看两眼,打个表就有结果了 但是呢?我考得非常的完蛋,只有30pts 据 ...
- OpenFaaS实战之五:大话watchdog
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Linux的链接(入门)
Linux的链接分为两种:硬链接和软链接 硬链接:如果B是A的硬链接,那么B和A指向同一个文件,但是删除A并不会影响B->允许一个文件有多个路径 软链接:类似Windows下的快捷方式,删除原文 ...
- .NET5控制台程序使用EF连接MYSQL
.NET5控制台程序使用EF连接MYSQL 1.使用nuget下载: Microsoft.Extensions.Configuration.Json Pomelo.EntityFrameworkCor ...
- C++ //运算符重载 +号
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 //1.成员函数重载 +号 6 cla ...
- Windows协议 LDAP篇 - 域用户和计算机用户
域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...
- [TensorFlow2.0]-手写神经网络实现鸢尾花分类
本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记.笔记中,有些内容理解可能较为肤浅.有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒. 若 ...
- k8s之数据存储-高级存储
PV和PVC 前面已经学习了使用NFS提供存储,此时就会要求用户会搭建NFS系统,并且会在yaml配置nf's,由于k8s支持的存储系统有很多,要求客户全部掌握,显然不现实.为了能够屏蔽底层存储实现的 ...