什么是DevOps

什么是DevOps

什么是DevOps
译者:FesianXu 2020/6/17 @ Tencent internship, 原文: https://qr.ae/pNKYl6

译者的话

DevOps是Develop+Operations的简写,意思是开发运营,译者最近在了解DevOps, CI/CD这些概念,发现这篇quora上的回答很精彩,因此打算翻译成中文,希望对大家有帮助。如有翻译上和理解上的建议(译者我翻译东西比较调皮,所以有些不知道够不够准确~),请在评论区留言,或者联系译者:

\nabla 联系方式:
e-mail: [email protected]
QQ: 973926198
github: https://github.com/FesianXu


正文

DevOps并不是一个目的,而是一个永远没有终点的持续提高的过程

让我用一种更加简单的方式去解释什么是DevOps吧,如果你把DevOps考虑成一种工具,那么你就错了。DevOps不是单纯地一种工具或者软件,它是你在持续提高你的/公司的产品过程中的一种需要接纳的开发运营文化,或者说,思想。它会帮助你聚集开发团队(Developer Team)和运营团队(Operations Team),使他们可以跟方便的协调合作。

因此,DevOps并不是

  1. DevOps并不是一种简单对开发团队和运营团队的组合。
  2. DevOps不是一个独立开来的团队类型。
  3. DevOps并不是一个产品或者一种工具。

如果从我们日常生活中去举例子,我们发现,DevOps的过程应该是:

什么是DevOps

  • 第一阶段: 你从SLR相机中拍摄了一张照片。
  • 第二阶段: 你把胶片送去冲洗(对应开发过程)。
  • 第三阶段: 照片在暗室里被处理。
  • 第四阶段: 相片被打印并且返回到你手中。
  • 第五阶段: 你给出了你对整个流程结果的反馈,嗯,你的照片有点模糊。

那么我们从第一阶段重新来过~
DevOps也在进行着相同的逻辑对公司的产品的敏捷开发部署测试等过程保驾护航。

一般来说,DevOps可以组成一个循环,这个循环包括了五个不同的阶段,我们后续分别去理解这五个阶段。
什么是DevOps

1. 持续化开发(Continuous Development,CD)

CD这个阶段包括对产品或者应用的计划(planning)和编码(coding)。整个项目的视野,前景取决于计划筹划阶段,而当我们开始编码的时候,CD就开始指向整个编码的过程了。对于计划而言,我们并没有任何特定的工具,但是对于编码过程来说,我们却有着一堆工具可以辅助。我们可以用任何语言进行编码,但是我们得管理代码版本,这个时候我们可以用Git, SVN, JIRA这些版本管理工具进行代码版本管理。

对于开发入门者来说,代码版本管理的必要性并不是显而易见的,因此我们这里列举下版本管理的好处,而版本管理又解决了DevOps中的哪些问题。

  1. 版本管理使得所有开发者可以围绕着某个代码仓库为中心进行协作,并且他们可以在“最新版本代码”的基础上进行合作式地编码,调试等,而不用担心出现太多技术上的分歧(当然讨论时的分歧咱们不计入在内~)。当运营计划去发布产品的时候,甚至他们都可以同时和开发一起接入代码仓库。(也就是说可以促进团队合作)
  2. 当在代码发行过程中,如果发现遇到了大bug,甚至其中有着一堆bug,那么我们也不需要担心,运营可以快速地利用版本管理进行版本回滚,因此可以返回到之前的稳定版本状态。容错性很高。

2. 持续化测试(Continuous Testing, CT)

当你准备发布代码的时候,不经过代码测试而直接发布代码是非常傻缺的行为,代码必须严格地进行测试,以对漏洞和性能进行评估。如果你同意这个观点,那么我们就应该考虑怎么去测试代码。人工测试太没有效率了,所以我们想要自动化的测试手段。一些工具,比如Selenium, TestNG, JUnit/NUnit被用来自动化测试例程的执行。自动化测试节省了很多手动执行测试例程的时间和劳力(想象下如果要你手动去点击一个个web页面上的按钮,和程序自动化去点击,哪个效率高是显然易见的)。并且,自动化测试可以在指定的特定时间中进行测试样例的运行,因此对时间调度更为灵活。在DevOps的生命周期中,这些工具的持续化应用称之为持续测试(Continuous Testing)。

3. 持续化集成(Continuous Integration, CI)

持续集成在第一个发行版过程中起着重要的作用,通过开发配置管理工具的帮助,它可以大幅度帮助CI工具的集成。毋庸置疑,现在最流行的CI工具是Jenkins,其他流行的CI工具包括BambooHudson。为什么我对CI有着如此高的评价呢?因为CI正是一个把所有DevOps结构包融到一个整体的存在。 CI工具给其他DevOps生命周期中的其他阶段中所涉及到的自动化工具提供了支持。CI工具把持续提高工具,持续测试工具,持续部署工具甚至是持续监视工具集成在一体。

  1. 当我们集成了Git/SVN时,Jenkins可以通过从共享代码仓库中拉下代码来进行自动工作规划调度,并且为构造和测试做准备。(Continuous Development过程)。Jenkins可以在任何一个提交到仓库的时期内进行代码的构造。
  2. 当集成了自动化测试工具,如Selenium的时候,我们可以实现持续化测试。开发的代码可以用一些如同Maven/Ant/Gradle的工具进行构造,当代码构造好后,Selenium可以创建一系列测试样例和执行样例,并且一个接一个地执行这些测试样例。而此时,Jenkins/Hudson/Bamboo的角色就是去调度/自动化“Selenium去自动执行这些样例”。
  3. 当集成了持续部署工具时,Jenkins/Hudson/Bamboo可以由配置管理器或者容器化工具触发自动部署。
  4. 最后,Jenkins/Hudson也可以集成监视工具,如Splunk/ELK/Nagios/NewRelic等,去持续监视由持续化部署后部署服务器的状态和性能。

什么是DevOps

4. 持续化部署(Continuous Deployment, CD)

我们已经见识了那些可以帮助我们从头去构建代码,并且测试的工具。现在,我们该去了解为什么DevOps还必须包含有配置管理工具(Configuration Management tools)和容器化工具(Containerization tools)了。这两者都对实现持续化部署(Continuous Deployment)起到了很大的帮助。

配置管理工具(Configuration Management tools)
配置管理工具构建并且维护了在一个应用中的功能性的需求和性能的一致性。简单来说,它的作用是在发行部署时要保持不同服务器之间的配置一致性,才能保证不同服务器有着相同的功能。最流行的配置管理工具包括:Puppet,Chef,Ansible,SaltStack

容器化工具(Containerization tools)
容器化工具帮助维护跨不同开发环境之间的一致性,我们通常会在不同的开发环境下开发,测试,部署应用。通过打包和复制在开发/测试使用的同样的依赖和包,容器化工具剔除了任何可能在生产环境中可能产生的错误。最流行的容器化工具是Docker

5. 持续化监视(Continuous Monitoring)

监视是和应用开发有着同样重要地位的步骤,因为在测试阶段总是有可能会存在一些未检测到的bug和漏洞存在。最流行的监视工具包括:Splunk,ELK Stack, Nagios,Sensu,NewRelic。当它们和Jenkins组合在一起时,我们就得到了持续化监视。