持续集成、持续交付、持续部署

2024-01-04

这三个术语有什么区别?我的大学提供了以下定义:

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

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

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

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

这一切都让我感到困惑。任何更详细的解释(或带有示例)将不胜感激!


Answer recommended by CI/CD /collectives/ci-cd Collective

持续集成

我同意你们大学的定义。持续集成是一种开发人员如何持续(而不是频繁)将代码集成到主线的策略。

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

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

所以尺寸很重要:

small task = continuous integration
big task   = frequent integration

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

持续交付

基本上有三种schools在持续交付中:

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

这所学校,着眼于艾迪生·韦斯利“马丁·福勒”签名系列 http://www.pearsonhighered.com/educator/series/AddisonWesley-Signature-Series-Fowler/11761.page并假设自 2007 年发布以来被称为“持续集成”2011 年推出的一款名为“持续交付”它们可能是与连续性有关的相同概念思想的第 1+2 卷某物.

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

这所学校的理念是,持续交付就是能够支持敏捷运动中的原则,而不仅仅是作为概念想法 or a 意向书但对于真实的——在现实生活中。

抵消第一原则敏捷宣言 http://agilemanifesto.org/principles.html其中“持续交付”一词实际上是第一次使用:

我们的首要任务是通过尽早持续交付有价值的软件来满足客户的需求。

这所学校声称“持续交付”是一种范式,它包含了对您的信息进行自动验证所需的一切。“完成的定义” http://guide.agilealliance.org/guide/definition-of-done.html.

这所学校接受“持续交付”和流行词或大趋势"DevOps" http://www.google.com/trends/explore#q=DevOps是同一枚硬币的两面,从某种意义上说,它们都试图接受或封装这种新的范式或方法,而不仅仅是一种技术。

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

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

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

加入哪所学校

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

我个人主张这样的理解持续交付与对敏捷运动所阐述的想法和概念实施现实生活支持有关。所以我加入了一个学校,该学校说这个术语包含了一个完整的范式——比如“DevOps”。

使用的学校delivery作为同义词deploy主要由创建部署控制台的工具供应商提倡,试图从该术语的更广泛使用中获得一些炒作持续交付.

持续部署

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

对于许多生产软件的领域来说,这些领域没有集中的信息源(设备、消费产品、客户端安装等),或者集中的信息源很容易更新(应用程序商店工件管理系统、开源存储库等)。 ),关于持续部署这个术语几乎没有任何炒作。他们只是部署;这不是什么大事——也不是需要特别关注的痛苦。

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

你们大学对持续部署是持续交付的自然下一步的定义隐含地假设经过质量检查的每个交付都应立即可供最终用户使用,这更接近我的部落用来描述术语“持续”的定义发布”,这又是另一个通常对每个人都没有意义的概念。

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

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

持续部署只是不断能够将开发过程的结果转移到可以全面执行功能测试的类似生产环境的学科。

持续交付的故事情节

在图片中,一切都变得生动起来:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

持续集成、持续交付、持续部署 的相关文章

  • 如何直接从我的 Gitlab 存储库部署到 Heroku

    在我的团队中 我们使用 Gitlab 作为远程存储库 因此我们正在寻找一种解决方案来将应用程序自动部署到 Heroku 我们找到了 Codeship 用于从 Github 自动将应用程序部署到 Heroku 有小费吗 技巧 如果您不准备使用
  • Erlang 代码的持续集成服务器

    您使用什么类型的敏捷工具进行 Erlang 开发 什么持续集成 http en wikipedia org wiki Continuous integration您使用 CI 服务器来构建 Erlang 代码吗 我得到的唯一参考来自 Quo
  • 是否可以从 Jenkins 脚本控制台发送电子邮件?

    为了在新的 Jenkins 实例中自动进行用户注册 我生成了一个Groovy脚本 Automatically generated groovy script 1463047124 jenkins model Jenkins instance
  • goimports 需要忽略供应商包

    我正在尝试实施dep在我的项目中 这一切都运行良好 但它还添加了一个供应商目录 我现在需要更新我的工具以忽略此目录 否则我提供的软件包将被修改 或者我会收到警告误报 我目前正在使用以下工具 goimports w go vet go lin
  • 如何使用个人访问令牌从 CircleCI 构建将提交推送到 Github

    执行 git 存储库构建时giantswarm docs content在 CircleCI 中 我想将提交推送到另一个存储库giantswarm docs 我有这个在deployment的部分circle yml git config c
  • 使用 MSBuild 构建解决方案文件夹

    我们有一个解决方案文件其中包含一些解决方案文件夹 库 单元测试 应用程序等 With 视觉工作室2010 https en wikipedia org wiki Microsoft Visual Studio 2010我们可以通过右键单击给
  • 在发布中部署 PDB 文件

    我有 CI 服务器设置来构建和部署我的所有环境 包括我的生产环境 据我所知 我的所有项目文件的设置和 CI 设置在我的暂存环境构建和生产环境构建之间都是相同的 但是 当我部署到生产环境时 并没有像暂存中那样与 DLL 文件并排放置 PDB
  • 使用 CDK Pipeline 时如何执行标准和控制

    CDK管道 https aws amazon com blogs developer cdk pipelines continuous delivery for aws cdk applications 非常棒 特别适合跨账户部署 它使开发
  • 有谁知道 CVS 命令行选项来获取上次签入的详细信息?

    我在 Windows 上使用 CVS 带有 WinCVS 前端 并且希望在构建失败时将上次签入的详细信息添加到我们的自动构建过程中的电子邮件中 以便更容易修复 我需要知道已更改的文件 更改它们的用户以及评论 我一直在尝试制定命令行选项 但似
  • 异常消息:没有工作文件夹映射

    我正在尝试在 tfs vs net 2012 中测试自动化构建 我已在源代码管理资源管理器中设置了工作路径 但现在出现错误 Exception Message There is no working folder mapping for t
  • Robocopy 将文件复制到远程计算机

    我正在尝试编写一个 robocopy 命令将文件从本地计算机复制到任何一台部署服务器 ROBOCOPY MyService bin release remote computer C services myservice MIR 我收到这个
  • Hudson 和 maven-release-plugin

    我正在使用 Hudsonmaven 发布 插件 http maven apache org plugins maven release plugin 如您所知 maven release plugin 构建项目分两步 release pre
  • Bitbucket 和 Azure DevOps 之间的集成

    我的要求是我想将我的 Bitbucket 存储库与 Azure DevOps CI 服务器集成 以便一旦我将代码推送到 bitbucket 存储库中 我的管道就会在 Azure DevOps CI 服务器中触发 因为我已经在 Bitbuck
  • 如何从 FinalBuilder 输出将被 TeamCity 捕获的消息?

    我正在运行 TeamCity Professional 4 5 3 和 FinalBuilder Pro 6 TeamCity 使用命令行任务运行 FinalBuilder 项目 如何让 FinalBuilder 将消息打印到构建日志中 以
  • Web 配置转换不适用于 Visual Studio Online、VS2013 和 Azure

    我有一个 MVC5 网站 使用 Visual Studio Online TFS 的持续集成成功地将暂存和生产版本部署到 Azure 我已经关注了这篇博文 使用自定义部署脚本通过 git 持续交付到 Azure 网站 http chrisk
  • Bazel远程缓存分析数据

    我正在 jenkins 上的 docker 容器内运行 bazel 通过 bazelisk 此外 我使用远程缓存 在不进行任何更改的后续运行中 我获得 100 的缓存命中 但每次创建新容器时都会运行分析阶段 约 60 秒 有没有办法远程缓存
  • 世博会错误 - 无法加载所有资源

    由于某种原因 当第一次使用命令启动我的应用程序时expo r ci no dev我收到Failed to load all assets error 收到错误的图像 https i stack imgur com pcvv4 png 如果我
  • 如何仅在 PR 上触发构建,而不是在合并后在 Azure 管道上触发构建?

    这是向pyjanitor project https github com ericmjl pyjanitor 我已经构建了分为多个作业的管道 并且这些作业被设计为并行运行 但是 我注意到即使在合并 PR 后也会触发构建 因此 我的问题有两
  • 在 TFS 2012 中使用持续集成进行自动部署

    我已经为 WCF 项目设置了持续集成 并希望使用 MSBuild 参数自动将应用程序部署到远程服务器 但它没有部署 运行新的构建时 所有测试都会通过并且所有项目都会构建 但网站尚未部署 另外 我没有从构建中收到任何错误 表明出现了任何问题
  • 如何从 Artifactory 存储库下载最新的工件?

    我需要来自存储库的最新工件 例如快照 人工工厂 http en wikipedia org wiki Software repository Repository managers 该工件需要通过脚本复制到服务器 Linux 我有什么选择

随机推荐