这三个词的区别是什么?我所在的学校提供了以下定义:
持续集成基本上意味着开发人员的工作副本每天多次与共享主线同步。
持续交付被描述为持续集成的逻辑演进:始终能够将产品投入生产!
持续部署被描述为持续交付之后的逻辑下一步:只要产品通过QA,就自动将其部署到生产环境!
它们还提供了一个警告:如果您能够持续部署到测试系统,有时也会使用术语“持续部署”。
所有这些都让我感到困惑。任何更详细的解释(或附带一个例子)都是非常感谢的!
这三个词的区别是什么?我所在的学校提供了以下定义:
持续集成基本上意味着开发人员的工作副本每天多次与共享主线同步。
持续交付被描述为持续集成的逻辑演进:始终能够将产品投入生产!
持续部署被描述为持续交付之后的逻辑下一步:只要产品通过QA,就自动将其部署到生产环境!
它们还提供了一个警告:如果您能够持续部署到测试系统,有时也会使用术语“持续部署”。
所有这些都让我感到困惑。任何更详细的解释(或附带一个例子)都是非常感谢的!
当前回答
持续集成基本上意味着开发人员的工作副本每天多次与共享主线同步。
或者一天几次以上。基本上,任何离散任务完成的频率都是相同的。例如,考虑一个开发团队在开发一个业务应用程序。在许多环境中,可能会发生以下情况:
一两个开发人员将本地更改保留几天,因为“它还没有准备好”。 一两个开发人员在源代码控制中创建分支,这样他们就可以处理他们的特性。“不被别人的改变所困扰”。
这可能会导致问题。糟糕的代码/任务组织导致分支,分支导致合并,合并……导致痛苦。持续集成作为一种实践,通过鼓励每个人从相同的共享源工作来解决这个问题。单独的工作项应该足够分散,以便在很短的时间内(最多几个小时)完成。
基本上总的思想是在少量的工作中集成少量的变更。集成一个大的变更是不成比例的大量工作。如果以恒定的小步骤完成,那么积分功的总和会更小。这允许开发人员将更多的时间花在业务可见的特性上,而不是开发过程开销。
持续交付被描述为持续集成的逻辑演进:始终能够将产品投入生产!
这遵循了离散的、定义良好的工作项的相同思想。如果有一个单一的主代码库,它只会根据完整的、经过测试的、已知的工作特性进行少量调整,那么该代码库总是稳定的。自动化测试在这里是能够证明按下按钮的稳定性的关键。
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,就自动将其部署到生产环境!
在商业环境中你很少会看到这种情况,遇到这种情况是一件非常愉快的事情。如果代码库可以自动测试并自动部署到任何给定的环境中,那么,生产环境就像其他环境一样。因此,如果团队已经建立到这一点,那么通过始终能够将更新部署到生产中,就有可能为业务带来巨大的价值。
缺陷修复更快地发送给客户,新特性更快地到达市场,新想法以较小的增量针对市场进行测试,以允许优先级的重定向,等等。
例如,假设一家公司对其基于软件的产品或服务的新功能有一个很大的想法。他们做了一些研究,他们了解市场,他们相信这个想法会带来新的收入来源。现在考虑交付该功能的两个选项:
花几个月的时间在一个分支中开发整个东西。花费数周时间将其集成回主代码库。花几天时间进行测试。花一天时间来部署它。然后才开始跟踪生产系统中的实际收入。 实现功能的一小部分,一次一个。每周发布一篇新文章。每周获得更多的实际收入数据。
在第一种情况下,如果该功能没有达到预期的市场效果,那么大量资金就会浪费在客户实际上并不需要的东西上。在第二种情况下,客户不需要它的事实在更早的时候就被确定了,其余的工作也被降低了优先级。
最终,这些“持续的事情”都是关于消除开发过程开销。如果一家公司的收入线是一项特定的服务,那么理想情况下,他们所有的成本都应该用于该服务。开发过程开销(合并代码、合并后重新测试相同的功能、手动部署任务等)实际上对服务的价值没有贡献,因此这些概念试图从流程中去除这些成本。
其他回答
我认为亚马逊的定义是直接和简单的理解。
持续交付是一种软件开发方法,其中发布过程是自动化的。每个软件变更都会自动构建、测试并部署到生产环境中。在最终发布到生产环境之前,由一个人、一个自动化测试或一个业务规则决定何时进行最后的发布。尽管每个成功的软件变更都可以立即发布到持续交付的生产环境中,但并不是所有的变更都需要立即发布。
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
问题和答案都不符合我简单的思考方式。我是一名顾问,并与许多开发团队和DevOps人员同步了这些定义,但我很好奇它如何与整个行业相匹配:
基本上,我认为持续交付的敏捷实践就像一个连续体:
非连续(一切手工)0% ----> 100%持续交付价值(一切自动化)
实现持续交付的步骤:
零。当开发人员签入代码时,没有什么是自动的……如果他们在签入之前已经编译、运行或执行了任何测试,那么您就很幸运了。
Continuous Build: automated build on every check-in, which is the first step, but does nothing to prove functional integration of new code. Continuous Integration (CI): automated build and execution of at least unit tests to prove integration of new code with existing code, but preferably integration tests (end-to-end). Continuous Deployment (CD): automated deployment when code passes CI at least into a test environment, preferably into higher environments when quality is proven either via CI or by marking a lower environment as PASSED after manual testing. I.E., testing may be manual in some cases, but promoting to next environment is automatic. Continuous Delivery: automated publication and release of the system into production. This is CD into production plus any other configuration changes like setup for A/B testing, notification to users of new features, notifying support of new version and change notes, etc.
EDIT: I would like to point out that there's a difference between the concept of "continuous delivery" as referenced in the first principle of the Agile Manifesto (http://agilemanifesto.org/principles.html) and the practice of Continuous Delivery, as seems to be referenced by the context of the question. The principle of continuous delivery is that of striving to reduce the Inventory waste as described in Lean thinking (http://www.miconleansixsigma.com/8-wastes.html). The practice of Continuous Delivery (CD) by agile teams has emerged in the many years since the Agile Manifesto was written in 2001. This agile practice directly addresses the principle, although they are different things and apparently easily confused.
来源:https://thenucleargeeks.com/2020/01/21/continuous-integration-vs-continuous-delivery-vs-continuous-deployment/
什么是持续集成 持续集成是一个自动构建和自动测试的过程或开发实践,即开发人员需要多次将他的代码提交到一个共享存储库中,其中每次集成都通过自动构建和测试进行验证。
如果构建失败/成功,它会通知开发人员,然后他可以采取相关行动。
什么是持续交付 持续交付是一种实践,在这种实践中,我们保持我们的代码在任何通过所有测试并具有将代码推入生产环境所需的所有配置的地方都是可部署的,但还没有部署。
什么是持续部署 在CI的帮助下,我们已经为我们的应用程序创建了构建,并准备将其推向生产环境。在这一步中,我们的构建已经准备好了,通过CD,我们可以直接将应用部署到QA环境中,如果一切顺利,我们可以将相同的构建部署到生产环境中。
所以基本上,持续部署比持续交付更进一步。通过这种实践,通过您的生产管道的所有阶段的每个变更都被发布给您的客户。
持续部署是配置管理和容器化的结合。
配置管理:CM主要是维护与应用程序需求兼容的服务器配置。
容器化:容器化是一组将在整个环境中保持一致性的费用。
Img来源:https://www.atlassian.com/
持续集成、持续交付和持续部署之间的区别
让我们长话短说:
置信区间: 一种软件开发实践,团队成员至少每天集成他们的工作。每个集成都通过自动构建(包括测试)进行验证,以尽可能快地检测错误。 CD: CD构建在CI之上,在CI中构建软件时,软件可以在任何时候发布到生产环境。