持续集成

menu icon

持续集成

在本指南中,了解有关持续集成这种软件开发和 DevOps 实践的更多信息,在这种实践中,每个开发人员每天至少一次将其新代码集成到代码主分支中。

什么是持续集成?

持续集成是一种软件开发过程,开发人员在整个开发周期中,更频繁地集成自己编写的新代码,每天至少一次将新代码添加到代码库中。 对构建的每次迭代都进行自动化测试,以尽早发现集成问题(越早发现,越容易修复),这也有助于避免最终合并代码以进行发布时出现问题。 总体而言,持续集成有助于简化构建过程,从而生成更高质量的软件和可预测性更高的交付计划。

持续集成 (CI) vs. 持续交付 (CD) vs. 持续部署

通过持续集成,每个开发人员每天至少一次将其工作与源代码的主分支集成,或者,最好是一天多次。 持续交付是另一种 DevOps 实践,其重点是将任何已验证的变更交付至代码库 - 包括更新、错误修订包甚至新的功能,以便尽可能快速安全地提供给用户。 持续部署则进一步简化流程,使用自动化测试来验证代码库变更,从而实现更为即时的更新。

持续交付会在持续集成结束时接上,自动将应用交付给所选的基础架构环境。 它确保将代码变更自动推送到各种不同的环境(如开发、测试和生产)。

优点

以下是持续集成可带来的几个最显着的优点:

  • 持续证明的进展,改进反馈
  • 尽早和改进的错误检测和度量,帮助您提前处理错误 - 有时在检入后几分钟内即可完成
  • 改进团队协作;团队中的每个人都可以更改代码,集成系统并快速确定与软件其他部分的冲突
  • 改进了系统集成,减少软件开发生命周期结束时的意外情况
  • 要合并和测试的并行变更更少
  • 减少系统测试期间的错误数
  • 持续更新系统以供测试

CI、敏捷和 DevOps

敏捷

敏捷是一种软件开发实践,旨在改进软件开发团队组织自身、适应需求中的变化以及发布软件的方式。 因为持续集成(链接位于 IBM 外部)敏捷开发 (PDF,153 KB) 有着许多相同的特征(例如测试自动化),所以可同时讨论持续集成和敏捷。 敏捷方法将开发组织为较小的工作或冲刺组。 当应用于 DevOps 时,这些组合实践有助于确保软件质量和项目灵活性。

持续集成需要频繁集成工作,通常每天多次。 可通过自动构建来验证集成,尽早检测集成错误。 构建应包括作为验证一部分的运行测试。 在自动化测试环境中将快速测试扩展到运行时测试,这样就自然形成持续交付。

敏捷(链接位于 IBM 外部)也是迭代的,能够适应变化,因此可随时间推移而扩展和发展解决方案。 在持续集成的背景下,敏捷软件开发基于您在持续集成时对功能价值划分的优先级来实施软件迭代。

DevOps

DevOps 框架中,持续集成位于软件开发过程的开始,每天至少检入代码一次,以确保本地副本不会游离于代码构建的主分支太远。 这可帮助您避免灾难性的合并冲突,从而破坏构建,使得团队需要花费数小时甚至数天才能解决问题。

持续集成是持续交付的测试、部署和发布阶段的先决条件。 整个开发团队可在几分钟内知道您是否创建了错误代码,因为持续集成服务会自动构建并测试代码变更以发现任何错误。

开源连续集成工具

以下是一些最受欢迎的连续集成工具:

  • Jenkins: Jenkins 是一种广泛使用的开源持续集成工具,支持开发人员在将代码落实到源存储库后立即自动构建、集成和测试代码,从而能够更轻松地捕获漏洞,更快地部署软件。 Jenkins 中包含 Docker 插件。
  • Buildbot: Buildbot 可以自动执行软件开发周期的所有方面。 作为作业调度系统,它对作业进行排队,然后执行作业,并报告结果。
  • Go: Go 之所以能够脱颖而出,是因为管道概念,这使得复杂的构建工作流程的建模变得容易。
  • IBM UrbanCode Build
  • Travis CI: 最“古老”和最值得信任的托管解决方案之一,也提供企业本地版本。
  • GitLab CI: GitLab CI 是开源 Rails 项目的组成部分,它是免费的托管服务,提供详细的 git 存储库管理,具有访问控制、问题跟踪、代码评审等功能。

与开源工具进行持续集成可带来诸多好处,包括:

  • 支持项目的数以百计的插件
  • 广泛支持开源语言,如 Python、Java 和 JavaScript
  • 免费提供,使学生、初创企业和开发人员能够获得功能强大的工具而不会带来财务负担
  • 可定制,支持开发人员在 CI 工具的基础上进行构建以满足需求
  • 能够修改和重新分发工具

可用于软件开发工作流程的开源持续集成工具包括 Jenkins、Go、Buildbot 和 Travis CI,可在下一部分阅读有关这些工具的信息。

用例

以下假设用例说明了两个软件开发人员如何使用持续集成来改进其 DevOps 流程。

两个开发人员必须相互通信,说明哪些功能有效以及这些功能如何工作。 这个小团队需要定期更新,并且必须能够整体集成并测试代码。 安排代码检入和测试花费了大量开发时间。 因此需要自动化的系统来执行持续集成。

协商何时进行组合和测试会耗费开发人的大量时间。

要做到这一点,他们必须就以下问题达成协议:

  1. 何时开始测试代码集成
  2. 如何测试集成是否已成功
  3. 如何将结果传达给团队

持续集成平台对这些问题都有默认答案,并且大多数都支持配置和设置。

通常,类似 Jenkins 的 CI 平台在检入时开始集成测试。 检入新代码时,CI 系统运行一组测试,可包含单元测试和回归测试,然后确定是否成功集成了代码。

或者,如果使用的是编译语言,那么默认测试将确定代码是否编译成功。 如果失败,那么新代码将中断构建。 对于 Python 或 JavaScript 等语言,必须创建您自己的集成测试。

无论哪种方式,大多数 CI 系统都会记录集成尝试、成功率和其他指标。

服务器

持续集成服务器是一种软件工具,用于集中所有的持续集成操作,并为构建项目提供可靠、稳定的平台。 您可以配置和调整 CI 服务器,以便为不同平台构建不同的项目。 持续集成服务器可轻松建模和直观呈现复杂的工作流程(支持持续交付),并为构建持续交付管道提供直观界面。 持续集成服务器提供了以下功能:

  • 在单一位置运行自动构建、测试和发布
  • 随时部署任何版本
  • 依序保留配置
  • 支持插件以增强功能
  • 监控项目的存储库
  • 拉取变更并执行为成功落实而定义的任务
  • 使用构建详细信息,向相关项目成员发送反馈

测试的重要性

持续测试在生成持续集成构建和包(也称为可安装实体或打包实体)时开始。 当打包实体投入生产环境后,持续测试停止。 每个端到端的步骤都包含测试套件。

至少,如果只有一个测试阶段,那么 30% 的持续集成涉及到测试。 实际上,持续集成活动中测试占到 50% 到 70%。 以前您必须手动完成测试。 而现在,您可以使用自动化测试 - 这是成功持续集成的关键。

作为自动测试持续集成的一部分,测试驱动的开发以迭代方式构建代码并一次测试一个用例,以确保测试覆盖率,提高代码质量并为持续交付奠定基础。 自动化测试会表明,新代码是否未能通过为应用的所有功能领域开发的一项或多项测试。 最佳实践要求开发人员在本地环境中运行全部或部分测试,这确保开发人员在新代码变更通过测试后才将源代码落实到版本控制中。 经验表明,有效的回归测试有助于避免以后发生令人不快的意外情况。

持续集成管道

持续集成管道以可重复的方式自动执行项目管道的阶段 - 例如,构建、测试和部署,可最大程度减少人工干预. 自动持续集成管道对于通过实施控制、建立检查点和提高速度以简化应用的开发、测试和部署至关重要。

最佳实践

持续集成过程是 DevOps 的关键组件,可帮助您将开发和运营团队统一到共享存储库中,以编码、测试、部署和支持软件。 以下是一些 CI 最佳实践,可帮助您取得成功:

  • 维护单一源代码存储库:使用源代码控制管理,跟踪和控制用于构建产品的所有文件。 这个整合的代码库有助于简化分发,提高可视性。
  • 自动构建:这涉及编译、链接以及用于生成构建工件的其他过程。 自我测试也应实现自动化。
  • 使用日常主线落实:强制要求开发人员每天至少对主开发流落实一次变更。 每个开发人员都必须验证其工作副本是否与主开发流一致。
  • 在生产环境的克隆中测试:使测试环境尽可能类似于最终的生产环境。
  • 自动部署:实施多个环境(开发、集成、生产)以运行构建和测试。

持续集成和 IBM Cloud®

IBM 方法是使用模板来定义和自动执行项目并配置安全性。 对库进行更改时,从属应用将重新构建并连接、链接或关联。 了解应用依赖关系可帮助您实现应用现代化

随着组织加速此类数字化转型,对业务和 IT 运营的自动化需求不断扩大。 要实现更大程度的自动化,首先要从可衡量的小型成功项目起步,然后可针对其他流程和组织的其他部分扩大规模和进行优化。

通过与 IBM 合作,您可以访问基于 AI 的自动化能力,包括预先构建的工作流程,以帮助加速创新,使每个流程都更加智能化。

采取下一步行动:

- 在 IBM® UrbanCode® Build 的帮助下,开始管理软件构建,包括扩展和配置。

- 阅读此 HFS Research 报告中有关"自动化成功的五个必备条件"的信息(链接位于 IBM 外部)。

使用 IBM Cloud 帐户立即开始。