【问题标题】:What is the difference between continuous integration, continuous delivery and DevOps?持续集成、持续交付和 DevOps 之间有什么区别?
【发布时间】:2016-01-22 07:49:19
【问题描述】:
我同时听到这些术语,想知道有什么区别?它们与持续构建和持续部署有何关系?
【问题讨论】:
标签:
continuous-integration
devops
continuous-delivery
【解决方案1】:
Continuous integration / 持续构建就是让开发人员很少且经常地向源代码存储库提交代码(并从存储库获取最新版本,因此任何进一步的更改都基于其他开发人员最近的更改)。这减少了在合并解析上浪费的时间,因为在这种情况下合并更容易。
该过程最好使用构建服务器实现自动化,该服务器还可以运行任何单元测试。然后在构建/测试失败的情况下向开发人员提供反馈,以便可以快速修复任何问题。
持续部署涉及将构建工件从构建过程自动部署到测试和生产环境。为了降低与此相关的风险,人们经常使用feature toggles 将发布(以受控方式)与部署分开。
持续交付与技术无关,更多与组织的软件交付方法有关(尽管确实大量使用自动化)。
DevOps 是一个更大的领域,通常强调打破开发人员和运营团队之间的障碍,让他们以一种能够从综合技能中受益的方式进行协作。环境配置、构建部署、监控(以及自动对问题和可扩展性作出反应)以及在某些情况下软件定义网络的更多自动化将在公司中产生。在一些组织中,已经创建了专门的 DevOps 团队。
【解决方案2】:
持续交付 (CD) 是在 2010 年由 ThoughtWorks 的 Jez Humble 和 David Farley 合着的书中首次描述的概念。
持续集成和持续交付经常相互混淆,但有一些关键区别:
- CI 可以由一名开发人员完成,其中 CD 需要团队协作
- 没有 CI 就无法完成 CD
- CD 是一个线性旅程,其中 CI 是一个持续反馈(构建)循环,推动 CD 向前发展
- 有了 CD,您就可以随时投入生产
- CI 允许您将代码多次检入 repo,以便您尽早发现问题
这是来自Martin Fowler的引用:
“持续集成是一种软件开发实践,其中
团队成员经常整合他们的工作,通常是每个人
至少每天集成 - 导致每天进行多次集成。
每个集成都通过自动构建(包括测试)进行验证,以
尽快检测集成错误。很多团队发现
这种方法可以显着减少集成问题,并且
允许团队更快地开发有凝聚力的软件。”
持续交付和持续部署之间的主要区别在于自动化。您将事物的部署方面自动化。如果您每天多次推送生产或出于各种其他原因,这很有效。
至于 DevOps,那完全是另一回事。人们通常认为 DevOps 是一种角色或一种工具,但它实际上是一种文化。你不“做” DevOps。这是我非常喜欢的 Mike Kavis 的话:
“DevOps 是一种文化转变或一种鼓励伟大的运动
沟通和协作(又名团队合作)以促进建设
质量更好的软件,速度更快,可靠性更高。”