CI/CD - 基础

Devops 到底是什么?

DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. DevOps is complementary with Agile software development; several DevOps aspects came from the Agile methodology.

DevOps是一套结合了软件开发(Dev)和IT运维(Ops)的实践方式。它旨在缩短系统开发生命周期并提供具有高软件质量的持续交付。DevOps与敏捷软件开发相辅相成;DevOps的几个方面来自敏捷的工作方式。

扩展理解:

DevOps是由“Development”和“Operations”这两个词组合而成的,分别表示开发团队和IT运维团队,在DevOps出现之前开发团队、质量保证团队、运维团队都是独立运作的,因此会导致协作障碍。DevOps表示一种文化转变,它在这些团队之间架起了桥梁,从而使这些团队能够在目标一致的环境中精诚协作。

DevOps是一组实践,这组实践可以紧密集成这些团队之间的流程,并且将集成后的流程变得高度自动化,因此通过DevOps实践可以更快、更有质量保证地构建、测试和发布软件。

另外,我们还需要理解DevOps和敏捷的关系。敏捷方法中对软件交付速度和交付体量的要求不断提高,才形成了DevOps实践。我们认为,DevOps是敏捷软件开发的产物。DevOps通过提供用于持续集成和持续部署的框架来提高敏捷性。我们也认为,敏捷是实施DevOps的先决条件。

发展历程

从计算机行业发展早期,业务复杂度不高,经常有独立开发者完成项目一说。但是随着计算机行业不断发展,业务需求不断叠加,软件工程师需要将工作内容进行细分:分析客户需求的分析师(BA)、设计界面与交互的设计师(UI)、实现逻辑的程序员(DEV)、负责测试的测试工程师(QA)、负责发布的运维工程师(OP)。———— https://zhuanlan.zhihu.com/p/647763571

最经典的就是瀑布模型(Waterfall Model)

瀑布模型是一种很好利用了不同职能的工作只会直接的与他们的直接上级和直接下级进行沟通的特性,将工作一级一级往下传递,只要每个节点都能保证自己的输入与输出最后就能得到比较好的结果。

这个方案将软件开发变成了工厂的流水线,使得软件开发能够稳定、高效。但是与工厂的流水线不同的是,软件开发的成果往往是定制化或者说特殊的。在实际的落地过程中,往往会出现客户在过程中提出新的建议,甚至变更最早期的需求。这就意味着原来计划是单向的瀑布模型常常会面临着返工的困境,也就意味着项目的延期甚至失败。更加可悲的是,当时的人们没有好的解决方案。

乱世出英雄,每个时代都会有一些杰出的英雄跳出来,带领大家打破困境,走向新的时代。在2001年,17位当时顶尖的行业人员聚在一起,发布了名为敏捷宣言(The Agile Manifesto)的倡议,引出了敏捷开发这一理念。

在敏捷宣言中,列举出十二条敏捷原则:

  1. 最高优先级的是:通过尽早和持续交付有高价值的软件,满足客户
  2. 欣然面对需求变化,即使是在开发阶段的后期,敏捷流程就是用变化来为客户获得竞争优势
  3. 频繁交付可工作的软件,从数周到数月,交付周期越短越好
  4. 在项目过程中,业务人员、开发人员必须每天在一起工作
  5. 以受到激励的个体为核心构造项目,为他们提供所需的环境和支持,信任他们可以把工作做好
  6. 最有效的、最高效的沟通方法是面对面的交谈
  7. 可工作的软件是衡量进度的首要标准
  8. 敏捷流程倡导可持续开发。客户、开发人员、用户要能够共同、长期维持步调(节奏)、稳定向前
  9. 持续地追求技术卓越和良好的设计,以此增强敏捷的能力
  10. 简单 -- 尽最大可能减少不必要的工作,简单是敏捷流程的根本
  11. 最佳架构、需求和设计,来自自组织型的团队
  12. 团队定期反思如何提升效率,并调节和调整自己的工作方式

打破了原先一次性交付给用户一整个软件的概念一一既然用户内心不清楚自己想要什么,那么我们也不会去按照自己的想法去假设。而是先给用户一个最小可用模型,确认一下方向性,然后再一点点完善。在软件开发的过程中引入了用户的参与,确保每个阶段的产物都是用户想要的结果,以保证方向不会偏离。

用户与开发者会经常碰头,不断交流新的想法与意见,在思想的碰撞中诞生一些伟大的产品,此时用户也是开发团队的一员,参与到整个开发流程中。敏捷开发的内核在于拥抱变化、及时调整。

敏捷宣言强调的敏捷软件开发的四个核心价值是:

  1. 个体和互动高于流程和工具
  2. 工作的软件高于详尽的文档
  3. 客户合作高于合同谈判
  4. 响应变化高于遵循计划

DevOps的来源就是自敏捷开发而来,作为一种方案,可以理解为敏捷开发在之后流程的延伸。DevOps通过一些工具或者手段,将软件开发的流程在工程师的角度上实现其独有的“闭环'。

如上图所示,一个完整的软件生命周期流程闭环就是一个计划(调研)一编码一构建一一测试一发布一一部署一一运维一监控。然后根据监控获得的数据(用户主动反馈或者用户 行为分析)来进行下一轮的流程。