持续集成与持续交付之间的联系和区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

作者 | Rebecca Pruess

编译 | 毛智伟

随着DevOps理念的普及与扩散,大家经常会看到持续集成(Continuous Integration)与持续交付(Continuous Delivery)这样的字眼,而怎样使用与选择这些方法成了大多数IT团队必须面对的问题。在讨论更加深入地讨论问题之前,首先需要清楚这两者之间的主要区别是什么,以及用什么方法可以更好改善工作流程,从而在更短的时间内为目标用户提供更高质量的软件。

持续集成与持续交付之间的联系和区别_第1张图片

持续集成(CI)和持续交付(CD)都体现了如今快节奏市场中的文化和发展原则,旨在缩短开发周期、提高软件交付效率以及实现全流程的自动化。同时,两者都有着共同的目标:让软件开发更少地依赖于手动执行的任务,在此基础上使得软件的发布更加频繁、更加安全可靠。由于有着相同的目标,因此持续集成和持续交付并非相互排斥的。只是它们的应用范围有所不同。

那下面就来看下CI与CD之间的联系与区别。

什么是持续集成

如上所述,CI和CD是相互关联的。持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。由此可见,CI专注于定期地让开发人员构建小批量的代码。而对于更新或新增的代码,它们会被上传至统一的代码库,执行自动构建与自动化测试的步骤。 频繁地向主干提交代码,意味着可以针对整个软件执行所有的自动化测试,并且在应用或接口的某个部分出现问题时,及时收到告警信息。

由于合并问题能被及时发现,因此也能被及时解决。此外,由于测试过程采用的是自动化测试,因此最终的主干分支一直处于可发布的状态。而这对传统的瀑布式的开发流程来说就很棘手。遵循CI中定义的原则,有助于进一步提高代码的可测试性和可部署性。通过将代码保持在可部署状态,就能避免在项目后期才进行单独的测试和Bug的修复,由此使得开发人员避开了“集成地狱”。而这也是Choerodon猪齿鱼开发流水线模块的主要目的。

持续集成与持续交付之间的联系和区别_第2张图片

什么是持续交付

持续集成包含了构建与自动化测试的阶段,而持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的“类生产环境”之中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。此外,持续交付同样遵循一个小型的构建周期,可以将一小批代码推送到多个环境:开发,测试或生产。

在此过程中,它结合了持续集成和持续部署的实践(即:让主干始终处于可部署状态)。而在Choerodon猪齿鱼平台中,当提交的代码完成以上步骤后,可以在“部署流水线-流水线管理”中创建对应的CD流水线将持续集成后产生的应用版本自动部署到对应的环境中去。此外,对于部署到正式环境的代码,可以在流水线中间添加一个人工卡点任务,只有通过人工审核后,才能执行后续的自动部署任务。

理论上来说,CD使得IT团队可以每天发布与更新应用程序,但大多数IT团队选择每月或每两个月发布更完整的更新。

持续集成与持续交付的区别

CI和CD之间的区别在于使用的范围和主要的受益者。

(1)持续集成

持续集成对于加快编码和构建阶段的软件交付过程至关重要。因此,它的目标对象主要是开发人员,特别是那些处在复杂组织架构中的开发人员。通过自动构建和测试的流程,将对软件做的所有更改都集成到统一的代码库中,而无需进行手动任务。此外,由于CI是一个持续的过程,因此开发人员可以即时得到问题的反馈。他们可以实时获取到相关错误的信息,以便快速地定位与解决问题。显然这个过程可以大大地提高开发人员以及整个IT团队的工作效率。

(2)持续交付

持续交付涵盖了软件交付生命周期的绝大部分,能为目标用户和客户带来重大利益。CD中包含了自动构建,打包,部署与测试的流程,以此来减少手动任务并加快软件交付速度。小批量的代码成功完成整个流程的每个阶段后,目标用户或客户便能在类生产环境中进行验收。因此目标用户可以在几天或几周内就收到修复后的功能与新增的功能,而无需等待数月后才更新。

CD的部署频率也加快了整个流程中的反馈循环。最新版本真的解决了预期的问题吗?是否满足了用户的需求?在此用户就可以快速地验收并作出判断,而IT团队也可以在问题影响到开发周期之前就解决反馈的问题。持续的反馈循环使得用户与IT团队更紧密地合作,以确保能准确的理解与满足他们的需求。整个交付过程进度可视化,方便团队人员与客户了解项目的进度。

在当前快节奏的市场中,这无疑是一个重大的优势。当您将软件更快地推向市场时,您将获得更大的竞争优势。

CI或CD适合您的业务场景吗

持续集成可确保代码库中始终保持最新的代码,同时可以快速集成来自多个开发人员的代码,并确保这些代码可在多个环境中协同工作。它通常有助于减少错误并通过自动化流程来减少手动任务。CI可以实现代码的自动构建与测试,减少开发中的Bug。因此,CI适用于那些过度依赖手动任务和复杂构建过程的企业。

持续交付适用于需要缩短开发周期,更快地为目标用户提供软件的企业。CD降低了部署新软件或升级已有软件的难度,且实现了全流程的自动化,因此您的团队无需手动执行复杂繁琐的任务,从而加快反馈速度,来确保您增加的功能真正地满足用户的需求。

总而言之,CI和CD是相互补充的。CI的统一代码库和自动化测试的方法可用于支持CD中更大规模的自动化和更频繁的部署。因此将CI和CD结合到您开发与交付的流程中,会使您的IT团队更加敏捷,更加快速地开发。

目前,大多数CI / CD的工具采用的方法都大同小异。 而一般的DevOps工具通常都会支持CI和CD方法,相应地还会提供相关的自动化测试框架。Choerodon猪齿鱼平台中的DevOps模块便是结合了CI与CD的方法,并在此基础上实现了测试与部署的自动化。用户需要根据自己的实质需求来创建CD流水线,以此来实现不同环境不同版本类型的自动化部署;当然,您还可以在其中设置人工卡点任务,使得CD流水线随时处于人工的监控之下。

此外,也有不少人认为CI是CD的前提与基础,没有CI就不能实现CD。这种说法也是比较流行的,其思路如下图。因此,不管是哪种说法,CI与CD都是DevOps工具中不可或缺的理念与方法。

持续集成与持续交付之间的联系和区别_第3张图片

原文地址: https://dzone.com/articles/continuous-integration-vs-continuous-delivery

更多Choerodon猪齿鱼持续交付相关文章▼

  • Choerodon猪齿鱼实践之持续交付中的分支管理与版本控制

  • GitOps | 一种云原生的持续交付模型

  • Choerodon猪齿鱼 Agent——基于GitOps的云原生持续交付模型

关于Choerodon猪齿鱼

Choerodon猪齿鱼开源多云技术平台,是基于开源技术Kubernetes,Istio,knative,Gitlab,Spring Cloud来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台通过提供精益敏捷、持续交付、容器环境、微服务、DevOps等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

  • 官网:http://choerodon.io
  • 论坛:http://forum.choerodon.io
  • Github:https://github.com/choerodon
  • 微信公众号:Choerodon猪齿鱼
  • 微博:Choerodon猪齿鱼

转载于:https://my.oschina.net/choerodon/blog/3054838

你可能感兴趣的:(持续集成与持续交付之间的联系和区别)