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并不是:
如果从我们日常生活中去举例子,我们发现,DevOps的过程应该是:
那么我们从第一阶段重新来过~
DevOps也在进行着相同的逻辑对公司的产品的敏捷开发部署测试等过程保驾护航。
一般来说,DevOps可以组成一个循环,这个循环包括了五个不同的阶段,我们后续分别去理解这五个阶段。
CD这个阶段包括对产品或者应用的计划(planning)和编码(coding)。整个项目的视野,前景取决于计划筹划阶段,而当我们开始编码的时候,CD就开始指向整个编码的过程了。对于计划而言,我们并没有任何特定的工具,但是对于编码过程来说,我们却有着一堆工具可以辅助。我们可以用任何语言进行编码,但是我们得管理代码版本,这个时候我们可以用Git, SVN, JIRA这些版本管理工具进行代码版本管理。
对于开发入门者来说,代码版本管理的必要性并不是显而易见的,因此我们这里列举下版本管理的好处,而版本管理又解决了DevOps中的哪些问题。
当你准备发布代码的时候,不经过代码测试而直接发布代码是非常傻缺的行为,代码必须严格地进行测试,以对漏洞和性能进行评估。如果你同意这个观点,那么我们就应该考虑怎么去测试代码。人工测试太没有效率了,所以我们想要自动化的测试手段。一些工具,比如Selenium, TestNG, JUnit/NUnit被用来自动化测试例程的执行。自动化测试节省了很多手动执行测试例程的时间和劳力(想象下如果要你手动去点击一个个web页面上的按钮,和程序自动化去点击,哪个效率高是显然易见的)。并且,自动化测试可以在指定的特定时间中进行测试样例的运行,因此对时间调度更为灵活。在DevOps的生命周期中,这些工具的持续化应用称之为持续测试(Continuous Testing)。
持续集成在第一个发行版过程中起着重要的作用,通过开发配置管理工具的帮助,它可以大幅度帮助CI工具的集成。毋庸置疑,现在最流行的CI工具是Jenkins,其他流行的CI工具包括Bamboo和Hudson。为什么我对CI有着如此高的评价呢?因为CI正是一个把所有DevOps结构包融到一个整体的存在。 CI工具给其他DevOps生命周期中的其他阶段中所涉及到的自动化工具提供了支持。CI工具把持续提高工具,持续测试工具,持续部署工具甚至是持续监视工具集成在一体。
我们已经见识了那些可以帮助我们从头去构建代码,并且测试的工具。现在,我们该去了解为什么DevOps还必须包含有配置管理工具(Configuration Management tools)和容器化工具(Containerization tools)了。这两者都对实现持续化部署(Continuous Deployment)起到了很大的帮助。
配置管理工具(Configuration Management tools):
配置管理工具构建并且维护了在一个应用中的功能性的需求和性能的一致性。简单来说,它的作用是在发行部署时要保持不同服务器之间的配置一致性,才能保证不同服务器有着相同的功能。最流行的配置管理工具包括:Puppet,Chef,Ansible,SaltStack。
容器化工具(Containerization tools):
容器化工具帮助维护跨不同开发环境之间的一致性,我们通常会在不同的开发环境下开发,测试,部署应用。通过打包和复制在开发/测试使用的同样的依赖和包,容器化工具剔除了任何可能在生产环境中可能产生的错误。最流行的容器化工具是Docker。
监视是和应用开发有着同样重要地位的步骤,因为在测试阶段总是有可能会存在一些未检测到的bug和漏洞存在。最流行的监视工具包括:Splunk,ELK Stack, Nagios,Sensu,NewRelic。当它们和Jenkins组合在一起时,我们就得到了持续化监视。