持续集成、持续交付和 DevOps 之间有什么区别?

What is the difference between continuous integration, continuous delivery and DevOps?

我听到了这些术语,想知道它们有什么区别?它们与持续构建和持续部署有何关系?

不同的人如何使用连续的 xxx 短语可能有些歧义,但我认为这篇博客 post 总结得很好。

http://blog.assembla.com/assemblablog/tabid/12618/bid/92411/Continuous-Delivery-vs-Continuous-Deployment-vs-Continuous-Integration-Wait-huh.aspx

DevOps 更像是一种总体思想而非具体实践,有点像敏捷是思想,单元测试是实践。

Continuous integration / 持续构建就是让开发人员很少且经常将代码提交到源代码存储库(并从存储库获取最新版本,因此任何进一步的更改都基于其他开发人员最近的更改).这减少了在合并解析上浪费的时间,因为在这种情况下合并更容易。

这个过程最好使用构建服务器自动化,它也可以 运行 任何单元测试。然后在构建/测试失败的情况下向开发人员提供反馈,以便可以快速修复任何问题。

持续部署涉及将构建过程中的构建工件自动部署到测试和生产环境中。为了降低与此相关的风险,人们经常使用 feature toggles 将发布(以受控方式)与部署分开。

持续交付与其说是技术,不如说是组织的软件交付方法(尽管它确实大量使用了自动化)。

DevOps 是一个更大的领域,它通常强调打破开发人员和运营团队之间的障碍,并让他们以从综合技能中获益的方式进行协作。环境供应、构建部署、监控(并自动对问题和可扩展性做出反应)以及在某些情况下软件定义网络的更多自动化将在公司中产生。在一些组织中,已经创建了专门的 DevOps 团队。

持续交付 (CD) 是 ThoughtWorks 的 Jez Humble 和 David Farley 在 2010 年出版的 co-authored 一书中首次描述的概念。

持续集成和持续交付经常被混淆,但有一些关键区别:

  • CI 可以由一个开发人员完成,其中 CD 需要团队协作
  • 没有CI
  • 就不能完成CD
  • CD 是一个线性旅程,其中 CI 是一个持续的反馈(构建)循环,使 CD 向前移动
  • 有了 CD,您随时可以推出产品
  • CI 允许您多次将代码签入回购协议,以便尽早发现问题

引用自Martin Fowler

"Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly."

持续交付和持续部署之间的主要区别在于自动化。您自动化部署方面的事情。如果您一天要多次推送到生产环境或出于各种其他原因,这很有效。

至于 DevOps,那就完全是另外一回事了。人们通常认为 DevOps 是一种角色或一种工具,但它实际上是一种文化。你不会 "do" DevOps。这是我非常喜欢 Mike Kavis 的一句话:

"DevOps is a culture shift or a movement that encourages great communication and collaboration (aka teamwork) to foster building better-quality software more quickly with more reliability."