谈谈持续集成,持续交付,持续部署之间的区别
假如把开发工作流程分为以下几个阶段:

编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署
从上图中可以看出, CI CD以及 CDP各自呈现出各自的自动化交付周期特征
持续集成
持续集成是软件个人研发部分向整体交付的方式,并定期完成集成以及时发现潜在问题。“持续集成源自于极限编程(XP),它是 XP 中的重要实践之一。”

CI 需要具备这些:
- 广泛应用的自动化测试方案是实现持续集成与持续部署的重要基础;与此同时,在选择合适的自动化测试方案时也需谨慎对待。
- 高效的基础架构得以实现是因为容器与虚拟机的存在使得开发团队无需费时费力。
- 采用先进的版本控制系统能够显著提升协作效率。
- 采用自动化构建与发布流程的关键组件能够显著提升软件质量。
- 引入有效的代码审查机制能够及时发现缺陷并修复问题。
持续集成的优点
- 在无潜在风险的前提下开展测试工作,并及时终止不必要的失败;
- 通过最大化资源利用率来最大程度上降低修复错误代码的成本;
- 删繁就简地将冗余的手工操作自动化为程序化的编码过程;
- 高频率地发布新版本并持续加速生产出可发布的版本;
- 增强开发人员对软件产品的信任感以便更清晰地了解项目进展与成熟状况;
- 提升开发团队对自身工作的认可感从而有助于营造良好的工程文化氛围。
持续集成,该从何入手
最核心的环节在于挑选合适的持续集成(CI/CD)系统方案。在决定采用私有部署模式或是云服务提供的CI/CD服务之间,则取决于团队所拥有的基础设施情况以及对CI/CD系统的资源投入程度。
比较分析私有化部署方案与云服务型持续集成平台之间的异同点,这有助于你在选择解决方案时更加得心应手。
- Self Hosted CI 指的是将软件部署在公司的机房或内网中,需要提供多台服务器来完成 CI 系统的运转,同时需要对不同机器之间进行环境配置。比如Maven 或 Gradle 或 Jenkins ,他们的特点是自由开源,且文档支持广泛。优点在于对构建环境有完全的控制权,能够实现完全定制。但需要搭建环境和配置、维护成本高,需要买专门的机器,花费较多人力物力且更新迁移风险高;
- Hosted CI 指的是由 SaaS 型的 CI 服务,全程在线进行构建配置,不需要考虑装机器,装软件,环境搭建等成本。常见的有 CircleCI,Codeship 和 TravisCI 等,还有国内最新的持续集成服务——flow.ci 。SaaS 型的 CI 的特点在于无需额外机器,几分钟就可以用起来。可以根据你的需要动态调度资源。省时,省心,省力。
总体上来说,在过去Jenkins曾是大多数企业采用的主要工具之一。然而这一趋势正逐步逆转,在云计算服务、容器化技术和软件即服务的推动下,
越来越多的企业开始转向Hosted\:CI这一托管型持续集成系统。
在选择合适的持续集成服务时,还需要考虑其灵活性以满足公司不同阶段的开发测试需求.
选择持续集成系统仅是持续集成应用的一个环节,在构建组织时还需着重培养适合的企业文化如代码质量管控体系和测试导向的文化等。若想实现有效的持续集成工作,则需为其后续的持续交付与持续部署工作奠定可靠基础。
持续交付
基于持续集成的技术基础之上,在经过整合后的新代码被成功部署至一个更加贴近实际运行状态的「类似生产环境」(production-like environments)中进行操作。这种持续交付模式早于整个软件开发周期中的常规部署策略,并且其实施依赖于高阶自动化水平下的持续集成机制。

考虑到延迟整体系统的完成并向下级系统交付会导致所有潜在的问题最终爆发出来且解决成本高昂的情况。例如,在编写完所有的单元测试之后,并非等待所有测试通过后再将代码迁移到连接数据库的Staging环境中进行进一步自动化测试;相反,在每个单元测试完成后就可以直接将其推送到该环境中以进行更多的自动化检查了。当然,“持续交付”的理念并非意味着每次软件发生改动都需要立即迁移到生产环境中处理问题;它指的是任何一次改动都可以在任何时间点实施到生产环境中进行处理
持续交付的好处
持续交付和持续集成的优点非常相似:
- 高效推出符合业务需求的产品,并以更高效率创造软件价值。
- 编码至测试至上线至交付的迭代频率提升, 通过持续优化快速响应。
- 遵循严格的发布标准, 整个流程具备标准化特点, 具备高度可重复性和稳定可靠性。
- 实时监控项目进度, 团队成员可根据实时信息掌握项目成熟度。
- 建立了新型协同机制, 从需求分析至产品用户体验及交互设计, 多角色紧密配合, 相较传统瀑布式开发模式减少了资源浪费。
持续部署
持续 deployment refers to the automatic deployment of code to production environments following code reviews. As the pinnacle stage of continuous delivery, it ensures that any code passing through automated testing processes is promptly pushed to production. This practice is also referred to as "Continuous Delivery."

为什么说持续部署是理想的工作流程?
开发团队提交代码源码至持续集成服务器进行接收与整合;随后运行全部单元测试用例;系统将根据各单元测验结果判断是否将应用迁移到预发布环境中进行;若成功迁移到预发布环境中,则展开全面的功能验收测验;当所有功能检测无误后会自动将应用迁移至正式生产环境;整个流程完全自动化且运行高效
在实际应用中,
产品涉及多种不同的运行环境,
包括QA环境以及各种自动化测试运行环境和生产环境等。
这些环境下产品的构建与部署过程相当复杂,
实现全自动化持续部署的过程相当具有挑战性。
若能够实现持续交付,
并且确保代码在模拟环境中稳定运行,
则团队成员或许能够真正掌握情况。
持续部署的优点
持续性的部署能够显著提升项目效率,并且在一定程度上具有较高的独立性。
一个人若能持续投入,则事半功倍;这是亚马逊一年内完成五千万次部署、每日均达百忙之中、每位开发人员平均部署超五十次的宝贵经验。
最后
构建了一个高效的DevOps生态系统
欢迎分享你的观点。

本文参考自:http://www.linuxprobe.com/continuous-integration.html
为所有喜欢开源技术的读者提供最新的Linux技术书籍免费下载服务。该平台致力于为技术爱好者提供更好的资源和学习机会。
探讨CI、CDM与SD之间的对比
[

](http://www.linuxprobe.com/training)
假如把开发工作流程分为以下几个阶段:

编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署
如你从上图所示看到,在软件工程领域中存在着三种不同的实践模式:持续集成、持续交付以及持续部署。这些术语分别代表了不同的自动化交付流程时间。
持续集成
持续集成由个体开发的部分向系统整体交付,并通过频繁整合来加快发现问题的速度。“持续集成”源于极限编程(XP),是 XP 中最初提出的 12 种实践之一。

CI 需要具备这些:
完全实现自动化测试是持续集成与持续部署实践的基础,并且选择合适的自动化测试工具至关重要;
灵活的基础设施使得容器与虚拟机的存在消除了开发人员与QA团队为解决复杂问题所需进行繁琐调试的需求;
版本控制方面则提供了多种解决方案包括Git、CVS与SVN等工具;
同时提供了自动化的构建与发布工作流支持软件包分发流程;例如Jenkins与flow.ci等工具均可实现这一功能;
另外构建/测试失败时能够提供有效的反馈机制帮助相关负责人快速定位并解决问题从而达到更加稳定可靠的状态。
持续集成的优点
- 在无风险的前提下进行测试,并采取快速反馈机制;
- 最大限度地降低风险的同时减少因修复错误代码而导致的成本;
- 将繁琐的手工流程自动化以提升开发人员对代码的关注度;
- 持续推动部署并加速生成可部署软件的速度;
- 提高项目可见度便于团队掌握项目进度及成熟状态;
- 增强开发人员对产品的信心促进良好工程师文化形成
持续集成,该从何入手
核心环节的关键在于恰当的选择合适的持续集成系统。是要构建基于私有服务器的部署环境还是采用云服务提供的托管型持续集成方案?这取决于团队所处的技术环境以及他们对于持续集成系统的资源投入程度。
如果你想要深入比较分析独立服务器环境与云服务模式的区别,请问是否愿意参与这项研究?
- Self Hosted CI 指的是将软件部署于企业内部网络或物理服务器环境中进行持续集成管理。通常需要预先配置多台服务器以支持CI系统的运行,并要求对各设备之间的运行环境进行相应的设置。例如Maven、Gradle或Jenkins等工具的特点在于开源且文档支持广泛。其主要优点是可以完全掌控构建环境并实现高度定制化解决方案;但这种模式的成本较高:不仅需要搭建和维护专属的基础设施还需投入大量的人力物力资源;而且在版本更新和迁移过程中也面临着较高的风险。
- Hosted CI 指通过云服务提供商提供的CI解决方案;其显著优势在于无需额外购置硬件设备即可完成构建与配置流程;几分钟内即可上手使用;根据实际需求动态分配计算资源可显著提升效率:省时省心省力的同时还能根据项目需求灵活调配人力物力资源。
整体来看,Jenkins在过去曾是大多数企业的首选工具.然而这一使用模式正经历着转变.随着公有云服务,Docker以及软件即服务(SaaS)的发展,越来越多的企业开始转向采用托管型持续集成(Hosted CI)系统.
另外,在选择合适的持续集成服务时
选择构建持续集成系统的步骤仅是实现持续集成应用过程中的一个环节。除了代码质量管控外,还需培养包括代码审查、自动化测试等在内的测试文化,这样才能形成完整的开发管理体系
持续交付
基于持续集成的方法,在更接近真实运行环境的「类生产环境」(production-like environments)中进行代码发布。这种模式早于整个软件开发周期和其中间阶段,并其基础是高效率自动化连续集成系统。

考虑到等到一切就绪后向下一个阶段移交所需的时间较长,在等待过程中可能出现一系列潜在问题并最终会在最后阶段集中显现出来而导致巨大的解决成本甚至是无法解决的情况举个例子当我们完成单元测试之后就可以将代码迁移到连接数据库的Staging环境以便进行更多的自动化测试如果系统运行正常就可以继续手动将代码迁移到生产环境中当然持续交付并非要求每次改动都必须立即发布至生产环境而是允许任何修改都可以在任意时机实施这一做法
持续交付的好处
持续交付和持续集成的优点非常相似:
高效发布机制能够充分满足业务需求的同时,在实现软件价值方面表现更为突出。
编码->测试->上线->交付这一频繁迭代的周期已经缩短至理想状态,并且能够提供即时反馈;
采用严格的质量发布标准后,整个交付流程实现了标准化、可重复性和可靠性保障,
通过进度可视化技术,团队成员能够清晰掌握项目的成熟度信息;
在项目管理中,我们采用了更为先进的协作模式:从需求分析阶段到产品用户体验评估,再到交互设计细化,涵盖开发、测试和运维等环节,各角色之间的紧密协同效率较传统瀑布式管理提升了20%以上。
持续部署
持续部署具体表现为在代码获得评审批准后会被系统自动触发至生产环境中的运行环节。它是整个持续交付体系中的关键节点环节之一,在此过程中所有经过完整流程验证并确认无误的技术变动都会被直接投放至生产业务中。这种安排也可简称为'连续发布'策略以提高操作效率和项目稳定性保障

为什么说持续部署是理想的工作流程?
开发人员将代码提交至系统中进行处理, 持续集成服务器接收并解析 incoming code, 运行单元测试用例, 基于测试结果分析后确定是否向预演环境部署. 若成功部署至预演环境中, 随后进行全量集成测试, 若所有测试均通过, 则自动触发产品环境部署流程
在产品开发过程中,在功能需求到部署流程这一阶段会经历多样的开发环境。这些包括但不限于QA环境、自动化测试运行环境以及生产环境等。搭建过程涉及多方面的配置与管理;此外,在不同环境下如何进行具体的部署操作也面临着诸多挑战——从头到尾地全自动持续部署的确存在诸多困难。然而若能实现持续交付,则可以让团队成员对代码质量充满信心
持续部署的优点
通过持续部署能够显著提升系统的灵活性,在一定程度上实现功能独立性的同时能够及时获取真实的用户反馈
This approach equates to an organization constructing and maintaining nearly half a billion infrastructure deployments annually, averaging a deployment every approximately fifteen minutes. This method is rooted in go-to best practices that ensure rapid and reliable delivery of digital transformation initiatives.
最后
连续集成、分阶段交付以及持续部署构成了一个高效的DevOps环境。对于整个团队而言,这些实践的优势与挑战并存。不管怎样,在未来软件工程中,频繁部署、快速交付以及自动化测试流程将成为不可或缺的关键因素。
欢迎分享你的观点。
