持续集成是一种软件开发过程,开发人员在整个开发周期中,更频繁地集成自己编写的新代码,每天至少一次将新代码添加到代码库中。 对构建的每次迭代都进行自动化测试,以尽早发现集成问题(越早发现,越容易修复),持续集成也有助于避免最终合并代码以进行发布时出现问题。 总体而言,持续集成有助于简化构建过程,从而生成更高质量的软件和可预测性更高的交付时间表。
根据定义,DevOps 旨在转变软件开发流程和组织文化,通过自动执行并 集成传统上各自为政的 开发和 IT 运营团队的工作,以更快速度交付更高质量的软件。
实际上,最出色的 DevOps 流程和文化超出了开发和运营的范畴,在软件开发生命周期中融入了所有应用程序利益相关方的建议 - 包括平台和基础架构工程、安全、合规、治理、风险管理、业务部门、最终用户和客户。
在 DevOps 框架中,持续集成位于软件开发过程的开始,每天至少检入代码一次,以确保本地副本不会游离于代码构建的主分支太远。 持续集成可帮助您避免灾难性的合并冲突,从而破坏构建,使得团队需要花费数小时甚至数天才能解决问题。
持续集成是持续交付的测试、部署和发布阶段的先决条件。 整个开发团队可在几分钟内知道您是否创建了错误代码,因为持续集成服务会自动构建并测试代码变更以发现任何错误。
持续集成的常见优点包括:
敏捷方法是一种软件开发实践,旨在改进软件开发团队组织自身、适应需求中的变化以及发布软件的方式。 因为 持续集成(链接位于 IBM 外部) 和 敏捷开发 有着许多相同的功能(例如测试自动化),因此同时讨论持续集成和敏捷方法非常有用。 敏捷方法将开发组织为较小的工作组,也称冲刺组。 当应用于 DevOps 时,这些组合实践有助于确保软件质量和项目灵活性。
持续集成需要频繁集成工作,通常每天多次。 可通过自动构建来验证集成,尽早检测集成错误。 构建过程中应运行多次测试,以此作为验证的一部分。 在自动化测试环境中将快速测试扩展到运行时测试,这样就自然形成持续交付。
敏捷方法(链接位于 IBM 外部) 也是迭代式的,能够灵活适应变更,因此它可以逐步扩展和发展解决方案。 在持续集成的背景下,敏捷软件开发基于您在持续集成时对功能价值划分的优先级,实施软件迭代。
流行的开源持续集成工具包括:
与开源工具进行持续集成可带来诸多好处,包括:
可用于软件开发工作流程的开源持续集成工具包括 Jenkins、Go、Buildbot 和 Travis CI,可在下一部分阅读有关这些工具的信息。
持续集成服务器是一种软件工具,用于集中所有的持续集成操作,并为构建项目提供可靠、稳定的平台。 您可以配置和调整持续集成 CI 服务器,以便为不同平台构建不同的项目。 持续集成服务器可轻松建模和直观呈现复杂的工作流程(支持持续交付),并为构建持续交付管道提供直观界面。 持续集成服务器提供了以下功能:
以下假设用例说明了两个软件开发人员如何使用持续集成来改进其 DevOps 流程。
两个开发人员必须相互通信,说明哪些功能有效以及这些功能如何工作。 这个小团队需要定期更新,并且必须能够整体集成并测试代码。 安排代码检入和测试花费了大量开发时间。 因此需要自动化的系统来执行持续集成。
协商何时进行组合与测试会耗费开发人员的大量时间。 他们须就以下问题达成共识:
持续集成平台对这些问题都有默认答案,并且大多数都支持配置和设置。
通常,类似 Jenkins 的持续集成 CI 平台在检入时开始集成测试。 检入新代码时,CI 系统运行一组测试,可包含单元测试和回归测试,然后确定是否成功集成了代码。
或者,如果使用的是编译语言,那么默认测试将确定代码是否编译成功。 如果失败,那么新代码将中断构建。 对于 Python 或 JavaScript 等语言,必须创建您自己的集成测试。
无论哪种方式,大多数持续集成 CI 系统都会记录集成尝试次数、成功率和其他指标。
测试的重要性
持续测试 在生成持续集成构建和包(也称为可安装实体或打包实体)时开始。 当打包实体投入生产环境后,持续测试停止。 每个步骤都端到端地涉及测试套件。
如果只有一个测试阶段,那么至少 30% 的持续集成工作涉及到测试。 实际上,持续集成活动中测试占到 50% 到 70%。 以前您必须手动完成测试。 而现在,您可以使用自动化测试 - 这是成功持续集成的关键。
作为自动测试持续集成的一部分,测试驱动的开发以迭代方式构建代码并一次测试一个用例,以确保测试覆盖率,提高代码质量并为持续交付奠定基础。 自动化测试会表明,新代码是否未能通过为应用的所有功能领域开发的一项或多项测试。 最佳实践要求开发人员在本地环境中运行全部或部分测试,这确保开发人员在新代码变更通过测试后才将源代码落实到版本控制中。 经验表明,有效的回归测试有助于避免以后发生令人不快的意外情况。
持续集成管道
持续集成管道以可重复的方式自动执行项目管道的各个阶段 - 例如,构建、测试和 部署,可最大程度减少人工干预。 自动持续集成管道对于通过实施控制、建立检查点和提高速度以简化应用的开发、测试和部署至关重要。
持续集成最佳实践
持续集成过程是 DevOps 的关键组成部分,可帮助您将开发和运营团队统一到共享存储库中,以编码、测试、部署和支持软件。 以下是一些持续集成 CI 最佳实践,可帮助您取得成功: