什么是持续集成?
利用更快速的反馈提高团队敏捷性。因为只有测试得够快,您前进得才能更快。
持续集成 (CI) 是将多个贡献者的代码变更自动集成到单个软件项目中的实践。这是 DevOps 的主要最佳实践,它允许开发人员经常将代码变更合并到一个中央存储库中,然后在其中运行构建和测试。自动化工具用于在集成前判定新代码的正确性。
源代码版本控制系统是 CI 流程的症结所在。版本控制系统还辅以其他检查,例如自动代码质量测试、语法风格审查工具等。
持续集成的重要性
为了理解 CI 的重要性,首先讨论一下由于缺少 CI 而经常出现的一些痛点会很有帮助。如果没有 CI,开发人员在为最终产品贡献代码时必须手动协调和沟通。这种协调不仅限于开发团队,还延伸到运营部门和组织其他部门。产品团队必须协调何时按顺序发布功能和修复,以及将由哪些团队成员负责。
非 CI 环境的通信开销可能成为复杂混乱的同步琐事,这会给项目增加不必要的官僚主义成本。这会导致代码发布速度变慢、失败率更高,因为它要求开发人员对集成保持敏感并考虑周全。随着工程团队和代码库规模的增加,这些风险呈指数级增长。
如果没有强大的 CI 管道,工程团队与组织其他成员之间就会形成脱节。产品与工程之间的沟通可能很麻烦。工程变成了一个黑匣子,团队的其他成员需要输入需求和功能,并可能得到预期的结果。这将使工程人员更难估算请求的交付时间,因为整合新变更的时间已成为未知的风险。
CI 做了什么
CI 有助于扩大工程团队的员工人数和交付产出。在上述场景中引入 CI 能够让软件开发人员独立地并行处理功能。当他们准备好将这些功能合并到最终产品中时,他们可以独立、快速地进行合并。在现代、高性能的软件工程组织中,CI 是一种宝贵且行之有效的实践。
如何使用 CI
CI 通常与敏捷软件开发工作流程一起使用。组织将编制构成产品路线图的任务清单。然后将这些任务分配给软件工程团队成员以供交付。使用 CI 可以独立开发这些软件开发任务,并在指定的开发人员之间并行开发。完成其中一项任务后,开发人员将把这项新工作引入 CI 系统,以便与项目的其余部分集成。
CI、持续部署与持续交付
持续集成、部署和交付是自动化软件发布管道(包括 DevOps 管道)的三个阶段。这三个阶段覆盖软件从构思到交付给最终用户的整个过程。集成阶段是该流程的第一步。持续集成包括多个开发人员尝试将其代码变更与项目的主代码存储库合并的过程。
持续交付是持续集成下一个延伸。交付阶段负责将构件打包在一起,然后交付给最终用户。此阶段运行自动构建工具来生成此构件。此构建阶段保持“绿色”状态,这意味着构件应准备就绪,可以在任何给定时间部署给用户。
持续部署是管道的最后阶段。部署阶段负责自动启动软件构件并将其分发给最终用户。在部署时,该构件已成功通过集成和交付阶段。现在是时候自动部署或分发构件了。这将通过脚本或工具实现,这些脚本或工具会自动将构件移至公共服务器或其他分发机制,例如应用商店。
持续集成的优势和挑战
持续集成是 DevOps 和高绩效软件团队的重要方面。然而,CI 的好处不仅限于工程团队,还能极大地惠及整个组织。CI 可以提高软件开发和交付流程的透明度和洞察力。这些好处使组织的其他部门能够更好地计划和执行营销策略。以下是 CI 的一些总体组织优势。
启用扩展
CI 使组织能够扩大工程团队规模、代码库规模和基础架构。通过最大限度地减少代码集成官僚主义和通信开销,CI 有助于构建 DevOps 和敏捷工作流程。它允许每个团队成员在发布之前拥有新的代码变更。CI 通过消除各个功能开发之间的任何组织依赖关系来实现扩展。开发人员现在可以在隔离的孤岛中开发功能,并保证他们的代码将与代码库的其余部分无缝集成,这正是 DevOps 的核心流程。
改善反馈回路
更快的业务决策反馈是 CI 另一个强大的优势。产品团队可以使用优化的 CI 平台更快地测试想法并迭代产品设计。可以快速推动和衡量变更以取得成功。错误或其他问题可以快速解决和修复。
加强沟通
CI 可改善整体工程沟通和问责制,从而加强 DevOps 团队中开发和运营之间的协作。通过引入与 CI 相关的拉取请求工作流程,开发人员可以获得被动的知识共享。拉取请求允许开发人员观察和评论来自其他团队成员的代码。随着功能通过 CI Pipeline 的发展,开发人员现在可以查看功能分支并与其他开发人员协作开发这些功能。CI 也可以用于帮助 QA 资源开支。高效 CI 管道和高度可信的自动测试覆盖范围将防止回归,并确保新功能与规格相匹配。合并新代码之前,它必须通过 CI 测试判定套件,这将防止任何新的回归。
CI 的好处远远超过采用方面遇到的任何挑战。也就是说,重要的是要意识到 CI 的挑战。在项目从没有 CI 过渡到 CI 时,CI 的真正挑战就出现了。大多数现代软件项目将从一开始就采用 CI,以缓解以后采用的挑战。
采用和安装
持续集成挑战主要围绕团队采用和初始技术安装。如果团队目前没有 CI 解决方案,则可能需要付出一些努力才能选择一个并开始使用。因此,在安装 CI 管道时,需要考虑现有的工程基础架构。
技术学习曲线
CI 功能附带了一系列支持技术,这些技术可能是团队需要进行的学习曲线投资。这些技术是版本控制系统、托管基础架构和协调技术。
CI 最佳实践
测试驱动的开发
一旦项目建立了具有自动测试覆盖率的 CI 管道,最佳实践是不断开发和改善测试覆盖率。CI 管道中出现的每项新功能都应附带一组测试,以判定新代码的行为符合预期。
测试驱动开发 (TDD) 是一种在进行任何实际功能编码之前编写测试代码和测试用例的做法。纯粹的 TDD 可以让产品团队密切参与,帮助制定预期的业务行为规范,然后将其转换为测试用例。在纯粹的 TDD 场景中,开发人员和产品团队将开会讨论规格或要求清单。然后,此需求列表将转换为代码判定清单。开发人员随后将编写与这些判定相匹配的代码。
拉取请求和代码审查
大多数现代软件开发团队都采用拉取请求和代码审查工作流程。拉取请求是有效 CI 的关键实践。当开发人员准备将新代码合并到主代码库时,会创建拉取请求。拉取请求会将已准备好集成的一组新变更通知其他开发人员。
拉取请求是启动 CI 管道并运行一系列自动批准步骤的好时机。通常在拉取请求时添加额外的手动批准步骤,在此期间,非利益相关者工程师对该功能进行代码审查。这样可以重新审视新的代码和功能。非利益相关者将提出编辑建议并批准或拒绝拉取请求。
拉取请求和代码审查是促进工程团队之间被动沟通和知识共享的强大工具。这有助于防范知识孤岛形式的技术债务,即特定工程师是代码库某些功能的唯一利益相关者。
优化管道速度
鉴于 CI 管道将成为一个中心且经常使用的流程,因此优化其执行速度非常重要。随着功能发布速度、团队规模和代码库规模的增长,CI 工作流程中的任何小延迟都会呈指数级增长。最佳实践是测量 CI 管道速度并在必要时进行优化。
更快的 CI 管道可实现更快的产品反馈回路。开发人员可以快速推动变更并尝试新的功能创意,以帮助改善用户体验。任何错误修复都可以在发现后快速修补和解决。这种提高的执行速度既可以为您的客户提供优于其他竞争对手的优势,又可以为您的客户提供更高质量的整体体验。
持续集成入门
CI 的基础依赖关系是版本控制系统 (VCS)。如果 CI 安装的目标代码库没有 VCS,则第一步是安装 VCS。在现代代码库中,缺少 VCS 的可能性不大。一些热门 VCS 包括 Git、Mercurial 和 Subversion。
版本控制到位后,下一步是寻找版本控制托管平台。大多数现代版本控制托管工具都内置了针对 CI 的支持和功能。一些热门版本控制托管平台包括 Bitbucket、Github 和 Gitlab。
在项目上建立版本控制后,应添加集成批准步骤。最有价值的集成批准步骤是自动测试。向项目添加自动测试可能会产生初始成本开销。必须安装测试框架,然后必须由开发人员编写测试代码和测试用例。
添加其他更便宜的 CI 批准机制的想法包括语法检查器、代码样式格式化程序或依赖关系漏洞扫描。一旦您设置了版本控制系统并制定了一些合并批准步骤,您就建立了持续集成!
CI 并非纯粹是工程特定的业务流程。组织、营销、销售和产品团队的其他成员也将受益于 CI 管道。产品团队需要考虑如何并行执行同步开发流。产品和工程部门将密切合作,确定构成自动测试套件的合格业务功能期望。
营销和销售人员将能够参考 CI 管道来协调面向客户的沟通工作和活动。CI 为组织其他部门提供了一定程度的透明度,让他们了解工程执行的进展情况。这种透明度和沟通性实用程序与敏捷的项目开发工作流程完美集成。
总结...
如果您的组织想从 DevOps 方法中获益,或者只是拥有一支由多名开发人员组成的软件团队,那么 CI 就很重要。它将帮助您的工程组织更快、更有效地执行。
CI 是现代高效软件开发组织的标准装置。最好的公司拥有强大的 CI 渠道,对于进一步的效率投资,不需要再三考虑。CI 的好处不仅限于工程团队,还适用于整个组织。
有许多第三方工具可以帮助 CI 管理和安装。一些热门选项包括 Codeship、Bitbucket Pipelines、SemaphoreCI、CircleCI、Jenkins、Bamboo、Teamcity 等。这些工具有自己的深入设置指南和文档,可帮助您入门。
试用 Atlassian 提供的一些最佳 CI 工具:
Bitbucket Pipelines 是一个很棒的实用工具,可以利用现代 CI 功能加快项目的速度。
Jira 是世界上最受欢迎的敏捷和 DevOps 项目管理工具之一。它与其他 Bitbucket 项目紧密集成,当与 CI 管道结合使用时,可以非常透明地了解组织的执行状况。
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。