从百度百科的解释上看,DevOps 是这样的一个概念:

DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合

为了避免说一些互联网黑话引起反感,所以我想把我理解的 DevOps 解释的更通俗一点

devops infinity

devops-infinity-1-1-e0c7aced1afe41d3a98f1ff576314480.png

我理解的 DevOps

一个互联网产品的生产过程,如果只发布一次,应该是这样的流程:

需求 -> 研发 -> 测试 -> 发布

当一个流程结束后,你的互联网产品将会重复这个过程进行功能的更新、bug 的修复等,称为一个 迭代

如果一个产品可以拆分成若干个小模块,以模块为单位进行上面的流程,并且错开时间端进行迭代的模式,就是一个简易的 敏捷开发 模式了

我理解的 DevOps 就是把多个这样的流程首尾相接,就是所谓的形成闭环

自动化测试和部署

从我个人的角度理解,所有的开发过程是由研发人员来完成的,也就是“程序员”们在做的。而测试、发布这样的工作是交由测试工程师、运维工程师做的。测试、发布这样的工作能不能省下来人员,交给机器人来完成呢?

测试

测试工程师大多数时间在根据需求和原型“写”测试用例和“执行”测试用例
程序员们有了一定的工作经验以后,通常都会选择同时写一些单元测试 unit test 来测试自己的代码是否存在缺陷
所以我觉得研发也可以花一点时间来写测试用例,执行的工作就可以交给机器人来完成了,自动化测试就可以通过一些工具进行配置和执行

部署

部署的部分,除了首次部署需要开通服务器或 vps,配置域名解析等等需要人工来完成以外,后面的每一次更新都可以交给机器人来完成
事实上,机器人甚至可以做到自动化的根据你的需求去购买服务器、解析域名、配置负载均衡等

举个例子:国内某个大眼睛社交平台遭遇重大热点新闻时往往会因人为 DDos 攻击,资源不足而服务器崩溃,而它的运维可以通过机器人或脚本迅速的在阿里云开 100 台服务器进行部署,并且与原服务器(集群)组成负载均衡来应对,整个过程不超过 5 分钟

Jenkins 是一个常用的部署工具,其中,在我看来 pipeline 是 Jenkins 的精髓,他可以完成的事情非常多,并不是拉取代码、构建、上传、发送通知这么简单。当然,拉代码、构建、发通知是最简单的流程

如果你的服务器资源够用,容器化也是一个很好的方案。Docker 就是这样的一个黑科技

当然,Jenkins 和 Docker 都有太多可以说的了,本人才疏学浅,还需要进一步的学习才能写更多的分享