这三个词的区别是什么?我所在的学校提供了以下定义:

持续集成基本上意味着开发人员的工作副本每天多次与共享主线同步。

持续交付被描述为持续集成的逻辑演进:始终能够将产品投入生产!

持续部署被描述为持续交付之后的逻辑下一步:只要产品通过QA,就自动将其部署到生产环境!

它们还提供了一个警告:如果您能够持续部署到测试系统,有时也会使用术语“持续部署”。

所有这些都让我感到困惑。任何更详细的解释(或附带一个例子)都是非常感谢的!


当前回答

我认为亚马逊的定义是直接和简单的理解。

持续交付是一种软件开发方法,其中发布过程是自动化的。每个软件变更都会自动构建、测试并部署到生产环境中。在最终发布到生产环境之前,由一个人、一个自动化测试或一个业务规则决定何时进行最后的发布。尽管每个成功的软件变更都可以立即发布到持续交付的生产环境中,但并不是所有的变更都需要立即发布。

Continuous integration is a software development practice where members of a team use a version control system and integrate their work frequently to the same location, such as a master branch. Each change is built and verified by tests and other verifications in order to detect any integration errors as quickly as possible. Continuous integration is focused on automatically building and testing code, as compared to continuous delivery, which automates the entire software release process up to production."

请访问http://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html

其他回答

持续集成基本上意味着开发人员的工作副本每天多次与共享主线同步。

或者一天几次以上。基本上,任何离散任务完成的频率都是相同的。例如,考虑一个开发团队在开发一个业务应用程序。在许多环境中,可能会发生以下情况:

一两个开发人员将本地更改保留几天,因为“它还没有准备好”。 一两个开发人员在源代码控制中创建分支,这样他们就可以处理他们的特性。“不被别人的改变所困扰”。

这可能会导致问题。糟糕的代码/任务组织导致分支,分支导致合并,合并……导致痛苦。持续集成作为一种实践,通过鼓励每个人从相同的共享源工作来解决这个问题。单独的工作项应该足够分散,以便在很短的时间内(最多几个小时)完成。

基本上总的思想是在少量的工作中集成少量的变更。集成一个大的变更是不成比例的大量工作。如果以恒定的小步骤完成,那么积分功的总和会更小。这允许开发人员将更多的时间花在业务可见的特性上,而不是开发过程开销。

持续交付被描述为持续集成的逻辑演进:始终能够将产品投入生产!

这遵循了离散的、定义良好的工作项的相同思想。如果有一个单一的主代码库,它只会根据完整的、经过测试的、已知的工作特性进行少量调整,那么该代码库总是稳定的。自动化测试在这里是能够证明按下按钮的稳定性的关键。

The less stabilization work that needs to be done (which, again, is development process overhead and should be eliminated), the more often that codebase can be pushed to any given environment. In a lot of companies a deployment can be a pretty grueling process. Even a week-long all-hands-on-deck operation. This is expensive and produces no business value. By employing good work item definitions, effective automated testing, and continuous integration a team can be in a position to automate the codebase's delivery to any given environment.

持续部署被描述为持续交付之后的逻辑下一步:只要产品通过QA,就自动将其部署到生产环境!

在商业环境中你很少会看到这种情况,遇到这种情况是一件非常愉快的事情。如果代码库可以自动测试并自动部署到任何给定的环境中,那么,生产环境就像其他环境一样。因此,如果团队已经建立到这一点,那么通过始终能够将更新部署到生产中,就有可能为业务带来巨大的价值。

缺陷修复更快地发送给客户,新特性更快地到达市场,新想法以较小的增量针对市场进行测试,以允许优先级的重定向,等等。

例如,假设一家公司对其基于软件的产品或服务的新功能有一个很大的想法。他们做了一些研究,他们了解市场,他们相信这个想法会带来新的收入来源。现在考虑交付该功能的两个选项:

花几个月的时间在一个分支中开发整个东西。花费数周时间将其集成回主代码库。花几天时间进行测试。花一天时间来部署它。然后才开始跟踪生产系统中的实际收入。 实现功能的一小部分,一次一个。每周发布一篇新文章。每周获得更多的实际收入数据。

在第一种情况下,如果该功能没有达到预期的市场效果,那么大量资金就会浪费在客户实际上并不需要的东西上。在第二种情况下,客户不需要它的事实在更早的时候就被确定了,其余的工作也被降低了优先级。


最终,这些“持续的事情”都是关于消除开发过程开销。如果一家公司的收入线是一项特定的服务,那么理想情况下,他们所有的成本都应该用于该服务。开发过程开销(合并代码、合并后重新测试相同的功能、手动部署任务等)实际上对服务的价值没有贡献,因此这些概念试图从流程中去除这些成本。

持续集成

我同意贵校的定义。持续集成是开发人员如何持续地将代码集成到主线的一种策略,而不是频繁地集成。

您可能会声称它只是版本控制系统中的分支策略。

这与你分配给开发者的任务大小有关;如果一项任务估计需要4-5个工作日,那么开发人员将没有动力在接下来的4-5天内交付任何东西,因为他还没有完成任何事情。

所以大小很重要:

small task = continuous integration
big task   = frequent integration

理想的任务规模不超过一天的工作量。这样,开发人员每天至少会进行一次集成。

持续交付

在持续交付中,基本上有三种学校:

持续交付是持续集成的自然延伸

这一学派,着眼于Addison-Wesley“Martin Fowler”签名系列,并做出假设,因为2007年的版本被称为“持续集成”,2011年的版本被称为“持续交付”,它们可能是与连续事物有关的同一概念思想的第1+2卷。

持续交付与敏捷软件开发有关

这所学校的观点是,持续交付是关于能够支持敏捷运动中的原则,而不仅仅是一个概念上的想法或意意书,而是真实的——在现实生活中。

在敏捷宣言的第一个原则中,第一次使用了“持续交付”这个术语:

我们的最高优先级是通过早期和持续交付有价值的软件来满足客户。

这所学校声称“持续交付”是一个范例,它包含了实现“完成定义”的自动化验证所需的一切。

这所学校认为,“持续交付”和流行词或大趋势“DevOps”是同一枚硬币的两面,从某种意义上说,它们都试图拥抱或封装这种新的范式或方法,而不仅仅是一种技术。

持续交付是持续部署的同义词

第三种学派主张,持续部署和持续交付可以互换使用来表示同一件事。

当某些东西在开发人员手中准备就绪时,它会立即交付给最终用户,这在大多数情况下意味着应该将其部署到生产环境中。因此,“部署”和“交付”意思相同。

加入哪所学校

你的大学显然加入了第一所学校,并声称我们指的是同一出版系列的第1+2卷。我认为这是对“持续交付”一词的误用。

我个人主张这样一种理解,即持续交付与实现对敏捷运动所陈述的思想和概念的现实支持有关。所以我加入了一所学校,他们认为这个术语包含了一个完整的范式——比如“DevOps”。

使用交付作为部署的同义词的学派主要是由创建部署控制台的工具供应商倡导的,他们试图从术语持续交付的更广泛使用中获得一些宣传。

持续部署

对持续部署的关注主要与以下领域相关:终端用户对软件更新的访问依赖于某些集中式数据源的更新,而这些集中式数据源并不总是容易更新,因为它是单一的,或者本质上具有(太高)一致性(web、SOA、数据库等)。

对于许多没有集中式信息源(设备、消费产品、客户端安装等)或集中式信息源易于更新的软件领域(应用商店工件管理系统、开源存储库等),几乎没有人大肆宣传持续部署这个术语。他们只是部署;这不是什么大不了的事,也不是什么需要特别关注的痛苦。

事实上,持续部署并不是每个人都感兴趣的事情,这也证明了那些声称“交付”和“部署”是同义词的学校完全错了。因为持续交付实际上对每个人都有很好的意义——即使你是在设备中做嵌入式软件或为框架发布开源插件。

你们大学对持续部署的定义是持续交付的自然下一步,隐含地假设每个经过QA的交付都应该立即提供给最终用户,这更接近于我的部落用来描述术语“持续发布”的定义,而“持续发布”反过来也是一个对每个人都没有意义的概念。

发布可能是一件非常具有战略意义或政治性的事情,没有理由假设每个人都想一直这样做(除非他们是在线书店或流媒体服务类型的公司)。然而,那些不盲目地一直发布所有内容的公司可能有很多理由想要成为部署大师,所以他们也会进行持续部署。不是发布到生产环境,而是发布候选环境到类似生产环境。

我再次相信你们的大学搞错了。他们把“持续部署”误认为“持续发布”。

持续部署就是持续地将开发过程的结果转移到类似生产环境的规程,在这种环境中可以全面执行功能测试。

持续交付故事线

在这幅画中,一切都活了起来:

持续集成过程是状态转换图中的前两个操作。如果成功,将启动实现done定义的持续交付管道。部署只是这个管道中必须持续执行的众多操作之一。理想情况下,从开发人员向VCS提交到管道确认我们有一个有效的候选版本,这个过程是自动化的。

DevOps是3C的组合——持续、沟通、协作,这导致了各个行业的主要关注。

在物联网连接设备的世界中,产品所有者、web、移动和QA等多种scrum功能以敏捷的方式在scrum周期中工作,将产品交付给最终客户。

持续集成:多个scrum特性在多个端点同时工作 持续交付:通过集成和部署,同时向多个客户交付产品。 持续部署:在多个平台上将多个产品部署到多个客户。

观看此视频,了解DevOps如何实现物联网连接的世界:https://youtu.be/nAfZt2t4HqA

让我们长话短说:

置信区间: 一种软件开发实践,团队成员至少每天集成他们的工作。每个集成都通过自动构建(包括测试)进行验证,以尽可能快地检测错误。 CD: CD构建在CI之上,在CI中构建软件时,软件可以在任何时候发布到生产环境。

持续集成:不断地将开发工作与主要分支合并,以便尽可能频繁地测试代码,以便及早发现问题。

持续交付:一旦代码准备好交付,就持续地向环境交付代码。这可以是分期或生产。其理念是将产品交付给用户群,用户群可以是QA或客户,以便进行审查和检查。

持续集成阶段的单元测试不能捕捉到所有的错误和业务逻辑,特别是设计问题,这就是为什么我们需要QA或测试环境。

持续部署:在代码准备好后立即部署或发布。持续部署需要持续集成和持续交付,否则在发布版中代码质量将得不到保证。

持续部署~~持续集成+持续交付