什么是持续集成(CI) ?

为了提供关于 "CI "一词的更多背景,值得注意的是,"CI "是"持续集成"的缩写。 CI 的定义如下:是让从事同一项目的每位成员定期将其对代码库的更改合并到中央仓库中的做法。 由于项目通常有多个开发者,将工作部分组合在一个中心位置非常重要。 理想情况下,这个过程应该自动化,并且每天执行多次。 持续集成的目标是通过促进协作、自动化和短反馈周期来维护构建和发布软件的可靠方式。

实现持续集成首先需要向源代码/版本控制系统定期提交更改,以便每位成员都在同一基础上构建。 每次提交都会触发一个构建和一系列自动化测试,以验证行为并确保所做更改没有破坏任何内容。 持续集成本身已颇具优势,并且是实现 CI/CD 管道的第一步。

通过采用明确的 CI 定义并在其开发过程中实施这一做法,团队可以简化其工作流程并提高其软件的质量。

持续集成

CI 实践

持续集成的关键要素如下:

  • 包含整个代码库的源代码或版本控制系统,包括源代码文件、库、配置文件和脚本
  • 自动化构建脚本
  • 自动化测试
  • 运行构建和测试的架构。

为了使每位成员都能在相同的基础上进行构建,您需要一直使用同一仓库并频繁地相互共享所做更改。 好的经验法则是让每位成员每天至少向主版本/主干提交一次更改。

提交更改后的下一步是构建解决方案,并进行一系列自动化测试以验证行为。 为这一过程实现自动化是持续集成的主要内容。手动进行构建和/或测试非常耗时且容易出错,并且基本无法实现每天都能集成更改这一目标。 您使用的具体构建工具和测试框架取决于您所使用的语言。

脚本和测试就绪后,需要维护该过程。 这包括添加自动化测试作为开发任何新功能的一部分内容、处理故障以及监控过程的性能。

添加 CI 服务器以用于监控您的仓库、触发构建、运行自动化测试以及整理结果,有助于集中管理这些零散的工作,从而让您在编写自定义自动化逻辑时节省时间,并提供诸如代码覆盖率指标和构建历史记录等信息以提升您的洞察力。

尽管这些工具和过程对于实现持续集成而言十分重要,但要最大程度发挥持续集成的作用,仍需人们的积极实践。 作为开发团队,您需要调整流程以包括定期向主版本提交更改、针对任何新功能添加自动化测试以及在出现问题时确定修复构建的优先级。 与 QA 团队合作确定优先级、设计和维护自动化测试,以及与架构人员协作以配置用于运行构建和测试的计算机,均有助于打破组织间相互孤立的局面。

持续集成挑战

尽管持续集成不仅惠及开发者也惠及整个组织,但这并不意味着它总会被欣然接受。

对于许多开发商店而言,DevOps 都代表了工作方式的巨大变革,并挑战了现有流程。 需要良好的沟通来协调团队间的工作并培养协作文化。

如果您已采用敏捷方法,那么进行这种转变通常会更为容易,因为听取反馈以确保构建正确产品的重要性以及自组织团队的观念已经得到认可。

如果尚未接触,那么认识到这是一项重大变革、积极互动、从小事着手并逐步展现其优势,都可以吸引您的同事接受持续集成。

持续集成还面临着更多实际挑战。 如果您正在处理大型单体式应用程序,那么构建速度可能会很慢,如果测试环境短缺,则并行化测试运行将是一项挑战。

拥有持续集成工作流的可见性并使用指标来识别瓶颈,可以帮助量化在架构更改、附加架构和自动化测试覆盖率方面所投入的成本和收益。

CI 的好处

借助持续集成,团队可以在不影响质量的情况下加快软件发布周期。 持续集成的主要目标是减轻部署期间可能出现的潜在风险并缩短反馈循环。

持续集成的主要好处包括:

  • 低风险部署。在编写代码时持续合并代码,可以尽早解决错误。
  • 更高的质量。自动执行大量手动任务可以让开发者腾出时间专注于更高级别的测试活动。
  • 更低的成本。通过实现持续集成、小批量交付和自动执行大部分工作,企业可以显著降低软件交付成本。

CI/CD 最佳做法

持续集成、交付和部署可以帮助企业降低成本并显著缩短软件交付周期。 正确设置后,它们可以大幅提高软件构建、测试和发布的效率。 部分 CI/CD 最佳做法包括:

  • 尽早提交,经常提交。通过更频繁地发布较小的更新,您可以接收并跟踪每个更改的反馈。 根据 DevOps 现状报告,高效团队的部署数量估计是低效团队的 417 倍。
  • 让构建保持绿色。通过实现每次提交新代码时运行的自动化测试,CI/CD 管道可以向开发者提供有关任何更改的快速反馈。
  • 使其成为部署到生产环境的唯一方式。当团队需要快速发布软件时,可能很容易跳过完善的 CI/CD 流程中的步骤。 但是,坚持这个规程可以帮助您避免可能潜入代码库的问题。

CI/CD 工具

如果没有合适的 CI/CD 工具,就不可能构建稳定可靠的 CI/CD 管道。 它们有助于协调管道的不同部分,从启动集成到触发自动化测试,再到将代码部署到生产。 无论团队使用支持 CI/CD 流程所有阶段的集成式 CI/CD 工具(例如 TeamCity),还是依赖于不同的工具来实现不同的目的,您选择的工具都应该支持团队使用的完整技术栈。 它们还应该能够与您用于工作的其他软件集成,并且具有足够的定制能力和灵活性,支持任何级别的工作流复杂性。

CI 与 CD

与其对比 CI 和 CD 的好处,不如考虑开发流程的不同部分如何协同工作,以帮助您向最终用户交付无错误的软件。

持续集成是将代码更改合并到一个 main 分支的流程。 持续交付以在持续集成阶段建立的测试和构建自动化为基础。 持续部署是 CI/CD 流程的最后阶段,在这个阶段满足所有要求后,新版本的软件将交付给最终用户。

详细了解 CI 与 CD

总结

采用持续集成有助于加快开发过程并同时提高代码质量。 通过自动执行这些步骤,您可以更高效地工作并专注于帮助用户提升价值。 但是,持续集成只是 CI/CD 管道的起点。 下一阶段为持续交付,将 DevOps 原理进一步应用于发布流程的后续部分中。