敏捷开发、持续集成/交付(CI/CD)、DevOps

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处连接和本声明。
本文连接: http://www.javashuo.com/article/p-tuhsjzck-ga.html

概述

敏捷开发和DevOps都是一种理念。他们的理念类似,都是为了更好更快的发布产品,但又不彻底相同。css

而CI/CD是实现这二者理念的一种方法。html

敏捷开发

前言

传统方式开发前有一份详细的开发文档,程序员照着需求直接敲代码,产品作好了直接部署上线。中间不会有人打扰,需求也不会变。程序员

可是目前的状况是,用户需求和市场都变化太快,就算你前期用户调研的再好,计划书写的再详细,也抵不住市场的变化,说不定产品作出来,用户就不须要了。docker

因此为了适应市场的发展,咱们必须不断提升咱们的开发效率,及时跟进用户需求,缩短开发周期。在这种状况下,就有人提出了敏捷开发。segmentfault

传统开发

传统开发方式的拥护者和敏捷开发方式的拥护者看待软件开发的世界观是不一样的。
在传统开发的眼里,软件开发过程是肯定的、可测的,只要在一开始努力收集到须要的信息并制定好计划,而后忠实的执行计划就应该能够成功。若是不成功必定是你在一开始就没有作好,没收集到必要的信息,计划作的很差或者执行不到位。而后传统开发方式就试图引入更多的流程,文档,试图让每一步都作到万无一失。服务器

敏捷开发

而在敏捷的眼里世界可不是这样的,敏捷认为在软件开发中,世界是变化的,有不少不肯定首先不论哪一种开发方式,不过无论什么开发方式前期仍是要作足充分的调研和分析,收集足够多的信息。可是咱们不是先知,没人能确保本身的预测足够准确,也没人能保证能收集到全部有用的信息。可是能够确定的是随着开发的进行,咱们对会对正在作的东西的认识愈来愈深入。于是作一段时间后经常有发现需求有调整,或发现以前的想法不对。另外一方面,世界原本就是在快速变化中,尤为是互联网,因此咱们也不得不适应这个环境。因此为了适应这个市场的变化,咱们要采用敏捷开发。架构

总结

在传统开发中要作好一个产品,大部分精力都要花在前期运维

  1. 更多调研
  2. 更多信息
  3. 更多文档

缺点微服务

始终走在市场后面,没法紧跟潮流,作出的产品容易被淘汰。工具

敏捷开发核心

  1. 拥抱变化
  2. 快速迭代

下面图的标题是How Spotify builds a product.很好的诠释了敏捷开发的含义

CI/CD

概述

能够把开发工做流程分为如下几个阶段:

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

正如你在上图中看到,「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不一样的软件自动化交付周期。

持续集成CI(Continuous Integration)

基本概念

持续集成(Continuous Integration)简称CI,持续集成强调开发人员提交了新代码以后,马上自动的进行构建、(单元)测试。根据测试结果,咱们能够肯定新代码和原有代码可否正确地集成在一块儿。

持续集成过程当中很重视自动化测试验证结果,对可能出现的一些问题进行预警,以保障最终合并的代码没有问题。

持续交付CD(Continuous Delivery)

基本概念

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。交付给质量团队或者用户,以供评审若是评审经过,代码就进入生产阶段。

持续交付并非指软件每个改动都要尽快部署到产品环境中,它指的是任何的代码修改都能够在任什么时候候实施部署。

这里强调的是

  1. 手动部署
  2. 有部署的能力,但不必定部署

持续部署(Continuous Deployment)

基本概念

http://3lsqjy1sj7i027fcn749gutj-wpengine.netdna-ssl.com/wp-content/uploads/2015/12/409-images-for-snap-blog-postedit_image3-auto.png

持续部署是指当交付的代码经过评审以后,自动部署到生产环境中。持续部署是持续交付的最高阶段。

这里强调

  1. 持续部署是自动的
  2. 持续部署是持续交付的最高阶段

持续交付(Continuous delivery)与持续部署的关系

有时候,持续交付也与持续部署混淆。持续部署意味着全部的变动都会被自动部署到生产环境中。持续交付意味着全部的变动都能够被部署到生产环境中,可是出于业务考虑,能够选择不部署。若是要实施持续部署,必须先实施持续交付。

  1. 持续交付表示的是一种能力
  2. 而持续部署则是一种方式

具体实现

总体而言,Jenkins 过去一直是大部分公司的选择,但这个现象正在发生改变,随着公有云服务、Docker,SaaS 的普及,愈来愈多的企业开始选择在线托管型持续集成系统。

总结

「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境,对于整个团队来讲,好处与挑战并行。不管如何,频繁部署、快速交付以及开发测试流程自动化都将成为将来软件工程的重要组成部分。

DevOps(开发与运维 – Development and Operations)

产生背景

DevOps是Development和Operations缩写,如今市场需求和技术变化都很是快,为了配合市场的需求,开发周期就要变短(可是软件质量不能由于这个缘由下降),好比说某些APP可能每周就要更新一次,因此说为了跟上市场的变化,势必就要缩短开发周期,可是传统的开发过程当中与运维相关的部分好比测试,发布,部署都很花时间,因此每每开发人员和运维人员之间有着很深的隔阂,而且二者沟通效率低,为了解决这个问题,使之可以更专一于开发。就有人提出了DevOps这理念。

DevOps简单的说就是为了打破传统开发和运维之间的隔阂与低效,在保证产品质量的前提下实现更自动化、更高效的协做与产品的交付。

DevOps是什么

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合做的文化、运动或惯例。经过自动化“软件交付”和“架构变动”的流程,来使得构建、测试、发布软件可以更加地快捷、频繁和可靠。

具体来讲,就是在软件交付和部署过程当中的提升沟通与协做的效率,旨在更快、更可靠的的发布更高质量的产品

咱们能够列举下DevOps是干啥的。

  • DevOps是一组过程、方法与系统的统称。用于促进开发、运维和质量保障部门之间的沟通、协做与整合。
  • DevOps是一种文化转变,打破了以往开发和运维之间的隔阂,或者说是一个鼓励更好地交流和协做(即团队合做)以便于更快地构建可靠性更高、质量更好的软件的运动。
  • DevOps 是一种工程模式,本质上是一种分工,经过对开发、运维、测试,配管等角色职责的分工,实现工程效率最大化,进而知足业务的需求。
  • DevOps是一种能力,具有此能力的团队能够高质量、快速的交付软件产品或服务。

DevOps与传统开发方式区别

传统的开发方式是线性的,开发与运维之间存在隔阂并且沟通效率低下。而DevOps使开发与运维的流程造成了一个闭环,打破了隔阂,各部门协做更紧密,提升了协做效率。

DevOps好处

http://5b0988e595225.cdn.sohucs.com/images/20180628/e4fbf44fa9b44f36b98e5f01f02db79f.jpeg

  • 依托自动化工具把开发、测试、发布、部署的过程整合,实现高度自动化与高效交付。
  • 在保证产品质量的前提下快速、频繁地发布产品。
  • 可以即便得到用户反馈,并快速响应。
  • 最大限度地减小风险,下降代码的出错率。
  • 高质量的软件发布标准。整个交付过程标准化、可重复、可靠。
  • 整个交付过程进度可视化,方便团队人员了解并控制项目进度。
  • 团队协做更高效。

为何DevOps姗姗来迟

  1. 容器技术开始成熟,特别是docker技术的大行其道。
  2. 微服务架构技术的普遍使用。
    微服务是支撑DevOps方法的手段,传统开发是在一个服务器里面,把各类元素装在一块儿组合成一个程序,但微服务是每个服务是一个单独的单元,能够部署在不一样的服务器上,经过SOA的方法,把它链接起来,再提供整个功能。
    微服务是由一个个团队组成,每团队有本身的服务,作好后,能够独立的进行测试、开发、部署,而后整个应用组合到一块儿。
  3. 敏捷开发流程的深刻人心。
    诸如Scrum, Agile, Kanban等敏捷方式被团队普遍使用,TDD、BDD、DDD这些测试驱动设计、行为驱动设计、域驱动设计等设计方式的采纳,CI和CD这些持续集成和持续部署等方式的实施,这些都是对DevOps的强烈需求。

DevOps带来的变革

  1. 角色分工:打破传统团队隔阂,让开发、运维紧密结合,高效协做
  2. 研发:专一研发、高度敏捷、持续集成
  3. 产品交付:高质量、快速、频繁、自动化、持续交付

具体落地

简单的说,DevOps=团队文化+流程+工具

  1. 团队文化的意思很简单就是你的团队要知道并承认DevOps理念
  2. 而后就要经过具体的流程和工具来实现这个理念。

DevOps工具

简单列举下常见的DevOps工具

 

参考:

http://www.javashuo.com/article/p-cncveosm-y.html

http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html

https://acejoy.com/2018/04/20/438/

https://zh.wikipedia.org/wiki/%E6%8C%81%E7%BA%8C%E4%BA%A4%E4%BB%98

https://zh.wikipedia.org/wiki/DevOps

https://www.zhihu.com/question/33600749/answer/57971123

https://www.jianshu.com/p/9fbdc741a10

相关文章
相关标签/搜索