DevOps Guidebook

📚 DevOps 知识图谱 关于Linux、服务器、数据库、部署等相关体系

完整体系

根据官方文档及社区建设构建尽可能实用的知识体系,宏观掌握技术体系

深度分析

尽览社区精品技术文章,将最受业界欢迎的使用方法收录其中

开发指南

体系化整理,随时查阅具体技术细节,方便前端开发者日常开发

工具链

DevOps 实践涉及到开发部门以及软件研发的整个生命周期,这意味着在整个开发生命周期中,涉及到一大批新旧工具,包括从规划、编码、测试、发布、监控等自动化的流程工具。

  • 编码:代码开发和审阅,版本控制工具、代码合并工具
  • 构建:持续集成工具、构建状态统计工具
  • 测试:通过测试和结果确定绩效的工具
  • 打包:成品仓库、应用程序部署前暂存
  • 发布:变更管理、发布审批、发布自动化
  • 配置:基础架构配置和部署,基础架构即代码工具
  • 监控:应用程序性能监视、最终用户体验

国内管理平台服务:

  • 云效
  • TAPD
  • 灵雀云

成功的关键

  • 流程(Process)
  • 精益(Lean)
  • 自动化(Automation)
  • 测量(Measurement)

能力需求

自动化能力

自动化是 DevOps 底线。如果软件系统没有一套较完善的自动化测试体系,就请不要谈 DevOps,要想同时提升发布效率和产品稳定性,以自动化替代手工方式快速、频繁的对软件质量进行验证是首要的手段。

主要体现在三点上:

  • 自动化比手动快。
  • 工具不会像人一样容易犯错误。
  • 通过自动化按照定义执行确保每次执行的一致性。

持续交付能力

实现 DevOps,需要给产品交付团队提供一个软件持续交付平台或者能持续交付的部署流水线,让软件从代码提交构建到交付给用户的整个过程能自动在流水线上完成。

主要体现在三点上:

  • 通过统一的部署流水线将从代码提交到交付给用户的整个过程高度可视化出来,信息透明;让开发、测试和运维以高度一致的方式工作在同一个流水线上,真正建立起协作。
  • 每一次的软件变更在这个完整的流水线中得到充分的验证,尽早发现有缺陷的变更。
  • 将一些必不可少的控制环节內建到自动化过程中,比如质量保障过程、过程度量、过程审计信息等,从而弱化很多传统依靠人为检查的管理流程。

合作文化

以提高业务响应效率出发,要有一荣俱荣,精诚合作,共同进步的工作态度。

CI/CD

相信大部分读者对 DevOps 和 CI/CD 经常会弄混淆,那么如何来理解 DevOps 和 CI/CD 之间的关系呢?可以这样来理解:DevOps 是 CI/CD 思想的延伸,CI/CD 则是 DevOps 的技术核心,如果没有 CI/CD,没有自动化测试,DevOps 是没有任何意义的。所以说 DevOps 是以 CI/CD 为基础来优化程序的开发、测试、运维等各个不同环节。

CI 持续集成

持续集成是一种开发实践,它倡导团队成员需要频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态,让产品可以快速迭代,同时还能保持高质量。

CD 持续交付和持续部署

谈到 CD,其中是包含了两层内容:持续交付和持续部署。

持续交付 != 持续部署

有时候很多人会把持续交付误认为成持续部署,然而两者是两个不同层次的能力。

持续交付:

持续交付是持续集成的延伸或者看作持续集成的下一步,它将集成后的代码部署到类生产环境,确保可以以可持续的方式快速向客户发布新的更改。如果代码没有问题,可以继续手工部署到生产环境中。它强调的是,不管怎么更新,软件是随时随地可以交付的。

持续部署:

持续部署是持续交付的下一步,在持续交付的基础上,由开发人员或运维人员自助式的定期向生产环境部署稳定的构建版本,持续部署的目标是代码在任何时刻都是可部署的,并可自动进入到生产环境。

说到这里,相信大部人已经能清楚明白了,持续交付是指团队确保每个变更可以部署至生产环境,但也许并不需要实际部署,这通常可能是出于业务方面的原因。而持续部署是指每个变更可以自动部署到生产环境。只有成功实现持续交付的前提下,才能进行持续部署。

提倡原则

DevOps 持续交付的八大原则对可运维性给出了这样的定义,在企业中研发和运维体系必然需要相互配合,开发团队负责功能性需求实现的同时,在架构和编码上注重非功能性需求的实现,测试团队与运维团队将围绕着各自职能的需求,规划与建设 DevOps 流水线中对应的工具系统,加速企业 IT 价值链的流转,以为企业创造更大的商业价值。

DevOps 提倡的原则

  • 从瓶颈点着手
  • Start Small,从小做起
  • 痛苦的事情优先解决
  • 工具也是一种文化
  • 自动化别人,先自动化自己
  • 价值拉动,而非事务驱动
  • 构建指标,驱动 DevOps 落地。
  • 创建从开发过程下游至上游的反馈环。
  • 强调全局优化,避免局部优化。
  • 持续做试验和学习的文化,通过反复实践来达到精通。