How-To's

如何选择 CI/CD 工具:框架

Read this post in other languages:

为组织选择 CI/CD 工具时,有很多选项。 在 G2 等第三方网站进行直接功能比较可以帮助您深入了解工具的核心功能。 

不过,您可能仍然会难以了解工具是否能够满足特定要求、使用起来有多容易,或者它与您的行业法规有多符合。

如何选择 CI/CD 工具

在这篇博文中,我们将提供选择合适 CI/CD 解决方案的通用准则,并深入探讨 TeamCity 如何融入这一框架。 我们希望这能帮助您在为组织选择最佳工具时做出明智决定。

选择符合需求和目标的合适 CI/CD 工具

不同团队对 CI/CD 解决方案的需求可能存在很大差异,并且完美服务于一个团队的工具可能并不适合另一个团队。

我们建议,为团队选择 CI/CD 解决方案时要考虑以下七大主要因素。

    1. 开发工作流。解决方案应该能够顺利集成到开发工作流中,不需要编写大量自定义脚本或插件。
    1. 管道配置。 工具应该为环境、安全检查、审批等提供灵活设置,允许工件和依赖项在构建步骤之间正确流动。
    1. 反馈和分析。 CI/CD 解决方案应提供从错误消息到基础架构性能等多个级别的全面反馈,确保快速解决问题和不间断的交付流程。
    1. 可扩缩性和维护。 从一种工具迁移到另一种工具可能需要数月的时间,因此从一开始就使用能够满足所有未来需求的解决方案非常重要。
    1. 安全。 防止恶意行为者窃取源代码、侵入基础架构或损害最终产品至关重要。
    1. 成本效益。在评估 CI/CD 解决方案时,不仅要考虑许可证或订阅的价格,还要考虑运营和维护费用。
    1. 易用性和支持。每个开发者,即使没有持续交付经验,也应该能够了解其项目的构建和部署,以及如何有效使用工具来更快交付更改。
  1. 托管模式。 根据公司的需求,您可以考虑使用云或自托管解决方案。 两种选择各有优势,最终选择完全取决于您的具体需求。

所有现代解决方案都提供核心功能,例如 Docker 支持配置即代码或拉取请求自动构建。 对于较小的项目,这些解决方案之间的差异可能并不显著。

不过,随着团队成长和工作流的复杂化,正确设置管道并确保其按预期运行将变得越来越困难。 在此类情况下,不同 CI/CD 工具的体验可能会大为不同。

💡另请参阅:2023 最佳持续集成工具 – 调查结果

来源:2022 开发者生态系统报告

来源2022 开发者生态系统报告

开发工作流

评估持续集成工具时,务必了解工具可以在多大程度上根据工作流自定义,以及团队需要在多大程度上根据工具调整流程。 考虑以下几个方面:

更改工作流的多样性

团队可能需要能够构建每个拉取请求,在有人提交到特定分支时运行管道,或者在特定用户更改特定目录中的文件时触发构建。

有时,您可能需要运行构建管道而不向仓库提交更改,以确保不会提交损坏的代码并避免对团队成员的工作产生负面影响。

💡另请参阅:预测试提交:版本控制中没有损坏的代码

代码可能分布在不同类型的多个版本控制系统 (VCS) 中,也可能位于单仓库中。 Maven 软件包或 Docker 容器等外部依赖项更新时,您可能需要重建和重新部署应用程序。

通过仔细评估 CI/CD 工具对特定更改工作流的支持,您可以确保工具适合团队,并将您自己流程中的更改需求降至最低。

Docker 和非 Docker 工作流

虽然 Docker 可以提供方便高效的方式来构建多种类型的应用程序,但在某些情况下,必须在实际操作系统上运行。 例如,如果应用程序依赖于与无法从 Docker 容器访问的硬件组件的集成,则您可能需要基于操作系统的工作流。

同样,如果您的软件需要与操作系统交互,例如开发系统驱动程序或 Windows 服务时,基于 Docker 的工作流可能不足以满足团队需求。

为团队选择最佳 CI 工具时,应评估具体项目需求并考虑这两种方式的优点和局限性。

团队成熟度

刚刚开始持续集成的团队在调整工作流以适应特定解决方案方面可能更加灵活。 因此,具有较少可配置选项的工具可以提供更简单直观的用户体验。

相比之下,准确了解其需求的高技能团队可能会发现全包式 DevOps 平台具有局限性,因为这些解决方案可能无法提供需要的灵活性和自定义水平。

迁移的便捷性

选择新的 CI/CD 工具时,迁移的便捷性应该是关键考量因素之一。 在许多情况下,迁移到独立解决方案可能比迁移到完整的 DevOps 平台更简单。 由此,用户可以分批迁移,您只需编写更少的手动集成,并且可以最大限度地减少开发工作流所受的干扰。

组织方面

考虑组织的文化和政策至关重要,特别是在鼓励团队选择自己的开发工具的情况下。

请注意,某些团队成员,特别对当前工具感到舒适和熟悉的团队成员,可能会反对更改工作流。

TeamCity 中的开发工作流支持

TeamCity 非常适合以下工作流:

  • 多 VCS 支持。
  • 在不提交的情况下运行 CI/CD 流程。
  • 精细控制更改(按分支、用户名、文件掩码等筛选)。
  • 触发定义的参数。
  • 与其他工具集成的全面 API。

在平台的简化体验和独立工具的灵活性之间可能不易选择,但好消息是,两者不一定互为阻碍。

由于团队经常同时使用多个 CI/CD 工具,您也可以结合使用独立解决方案和全包式 DevOps 平台,只要两者之间具有适当集成即可。

管道配置

每个团队都有自己独特的工作流和需求,因此使用完全满足您需求的可自定义解决方案至关重要。 以下是您在选择 CI/CD 工具时可能会考虑的不同类型的管道配置。

基于 UI 和代码的配置

某些工具提供基于 UI 的配置方式,可以轻松上手和维护设置,因为管道无需任何特殊知识即可配置。

所有现代工具都支持配置即代码,提供版本化的配置历史。

许多工具使用 YAML 配置,提供了非常直观的方式来自动执行简单应用的构建和测试。 不过,随着团队和基础架构变得更加复杂,管理 YAML 文件可能会越发困难。

对于大型项目,使用允许循环、条件语句和其他语言结构的成熟编程语言配置 CI/CD 可能更为有效。 此外,它还使在 IDE 中编写配置代码以及利用其重构和调试功能更为轻松。

 

工作流自定义

自定义是选择持续集成和持续交付软件的关键方面,因为它允许团队创建与其特定构建和部署工作流相匹配的管道。

根据触发事件,例如代码提交、依赖项更新或定时触发器,团队可能需要自定义构建环境、测试范围、Docker 镜像标签和其他管道组件。

如需在同一构建代理上按顺序执行特定步骤(例如,您可能想要启动 Windows 服务,然后在同一系统上运行构建),则所选工具应当能够完全根据需要进行设置。

环境配置

选择 CI/CD 工具时,必须考虑其在环境配置方面提供的自定义水平。 具体来说,团队应该能够选择最符合其要求的构建环境,无论是使用 Docker 容器、云构建代理、裸机服务器还是混合选项。

💡另请参阅:TeamCity 的构建基础架构功能

管道优化

如“可扩缩性”部分所述,可以通过多种优化技术帮助团队更快完成构建并缩短反馈循环。

一项关键优化技术是能够缓存依赖项,这可以避免每次运行构建时都下载和安装依赖项,有助于尽可能缩短构建时间。 此外,构建工件重用可以进一步减少构建时间,因为先前构建的组件可以在后续构建中重用。

跨多个构建代理并行化测试是在大型项目中优化管道的另一种有效方式。 将测试分散到多个构建代理中,团队可以减少运行所有测试所需的时间,有助于缩短反馈循环并确保更快识别和解决问题。

 

💡并行测试彻底改变了我们开发和测试 TeamCity 的方式。 我们自己的集成测试速度提高了超过 10 倍,用时从 4 小时缩短到大约 20 分钟。

工件管理

生成和传播工件对于任何 CI/CD 管道都至关重要。 工件允许构建“通信”并将数据从一个构建传递到另一个构建。

通过选择可以存储工件的工具,您可以存储构建生成的数据以供进一步分析和调试。

 

反馈和分析

CI/CD 的主要目的是缩短接收软件更改反馈所需的时间。 最实用反馈直接与特定代码更改相关,并提供有关构建和部署状态以及性能和质量指标更改的信息。

评估 CI/CD 解决方案时,必须考虑以下方面:

构建结果分析

CI/CD 解决方案应提供构建结果的详细分析,包括有关失败测试、构建时间、错误日志和其他关键指标的信息。 这些信息应该易于访问,并可以让开发者快速识别和解决问题。

趋势

工具需要提供趋势分析功能,使团队能够跟踪构建和部署性能随时间的变化。 这可以帮助团队识别模式和趋势,并在潜在问题严重化之前主动将其解决。

性能监视

为了识别瓶颈和解决影响 CI/CD 流程效率的问题,需要分析构建代理的性能并确定为构建基础架构提供更多资源的需求。

TeamCity 中的性能监视

VCS 和问题跟踪器集成

通过集成版本控制系统和问题跟踪器,CI/CD 工具开辟了更多提供反馈的途径。

不稳定测试检测

对于持续集成工具,能够分析和检测不稳定测试非常重要。 为了缩短反馈循环和加快开发流程,需要可以识别不稳定测试并在测试结果中将其高亮显示的工具。

可扩缩性和维护

软件项目的规模和复杂性往往会逐渐增加。 可靠的 CI/CD 系统必须能够应对这种增长,并与管道、构建、用户、角色和工作流数量的增长保持同步。

要确保团队永远不会受到阻碍,系统应该能够有效管理资源并配备监控和维护工具,快速解决问题。

以下因素将帮助您了解团队所需的可扩缩性水平。

用户管理

在小型项目中,定义谁可以触发构建、查看构建结果或修改管道配置的基本角色访问规则通常就已足够。 大型团队需要更高级的功能,例如 LDAP 集成或单点登录 (SSO) 支持、双重身份验证、项目层次结构、精细权限管理、审批工作流和审核。

💡另请参阅:TeamCity 的用户管理功能

管道优化

随着提交频率和工作流复杂性的增加,有效利用 CI/CD 资源也将越发重要。 这可以通过重用构建工件、最大程度减少多余重建数量、重新排列构建队列、并行化测试以及其他类似功能来完成。

项目模板

组织规模越大,项目模板的优势就越明显。 通过标准化典型工作流,您可以显著减少创建和维护管道所需的工作量、改善团队之间的协作、防止错误配置并提高 CI/CD 管道的安全性。

在本案例研究中,著名游戏开发公司 Gearbox 分享了他们如何借助 TeamCity 的可重用项目模板简化 CI/CD 流程并标准化 CI/CD 做法。

阅读完整案例研究

性能和容错

随着项目数量和计算资源需求的增长,扩展构建基础架构和降低潜在停机风险也更具挑战性。

大型公司的典型需求包括自动配置构建代理(例如通过与云平台集成)以及在池中组织构建代理以方便管理的功能。

企业级解决方案非常注重高可用性功能,例如在集群环境中运行多个应用程序服务器以及智能负载均衡。

维护和升级

要识别和解决 CI/CD 设置中的问题,管理员应该拥有监控和日志记录工具,并且能够根据需要增加资源、实现缓存机制或更新工件保留政策。

解决方案升级需要特别注意。 部分工具非常依赖外部插件,以至于难以甚至无法在不破坏现有功能的情况下升级。

对于复杂性有限的小型团队和项目来说,可扩缩的 CI/CD 解决方案可能并不重要。 然而,随着团队规模和项目复杂性的增加,这将成为软件开发流程中最关键的方面之一。

TeamCity 如何支持可扩缩性

TeamCity 可以支持任何规模的项目,包括具有大量依赖项的项目。 它可以在高负载期间自动扩缩。 TeamCity Server 的一个实例可以与超过 1,000 个构建代理稳定配合。

💡另请参阅:解决构建服务器可扩缩性问题

安全功能

安全性是所有软件开发流程的主要考虑因素,对于 CI/CD 尤其重要,因为 CI/CD 工具拥有对敏感数据和系统的受信访问。

评估解决方案时,应从两个主要角度分析安全功能:

  1. 服务的安全性。 由于每天都会出现新的威胁和漏洞,解决方案必须确保潜在攻击者无法访问您的源代码、秘密密钥、构建基础架构或构建结果。
  2. 最终产品的安全性。许多 CI/CD 工具可将安全检查集成到构建管道,确保生成的软件不存在可被利用的漏洞。

部分团队倾向于优先考虑速度和效率而不是安全性,忽视安全性最佳做法。 集成式平台通常会提供更简单的方式来保护 CI/CD,代价是将您“供应商锁定”到其生态系统和工作流。

💡查阅我们的白皮书“防止您的 CI/CD 服务器遭受供应链攻击的 9 种方式”,获取更多安全提示。

成本效益

随着管道越发复杂,团队规模不断扩大,与其他可能影响 CI/CD 系统有效性的因素相比,许可证或订阅的价格可能变得不那么重要:

  • 据统计,通过重新排列构建队列和尽可能减少冗余构建,团队可以节省至少 30% 的构建时间和相关成本。
  • CI/CD 开箱即支持的工具和服务越多,编写和维护自定义脚本和外部集成的几率就越低。 这会极大地影响维护成本。
  • 此外,大多数团队都有高峰期(通常在发布期间),在此期间持续集成工具的任何故障都会严重影响公司业务。 如果没有特定 CI/CD 解决方案的实际经验,这是很难评估的挑战之一。 但是,通过阅读其他团队关于类似任务的评价和反馈,仍有可能了解它如何处理此类问题。

最终,CI/CD 解决方案的总拥有成本取决于团队的具体需求。 一般来说,应谨慎考虑以下因素:

集成成本

将 CI/CD 与版本控制系统、问题跟踪器、构建和测试框架、部署自动化系统以及其他工具集成可能非常耗时和昂贵。

维护成本

每个 CI/CD 解决方案都需要分配资源来运行定期安全审核、更新底层基础架构,以及诊断和消除瓶颈。 在许多公司中,支持这些流程需要整个团队。

CI/CD 效率

如果构建始终处于队列中并且无法获得快速反馈,这就违背了 CI/CD 解决方案的初衷。 云端动态扩缩、构建的重用和测试并行化等功能会显著影响大公司的开发者效率。

反馈

要实现高效的软件开发,及时且实用的反馈循环必不可少。 构建失败时,开发者应该快速找出问题的根本原因以及解决问题的明确路径。 通常,从收到构建失败通知到完全理解需要修正的内容之间存在一段明显的时间,这就是可靠的工具可以提供巨大价值的地方。

通过分析构建日志并提供有关问题的精确信息,最好的 CI/CD 工具可以帮助开发者快速有效地解决问题,加快反馈循环并提高整体工作效率。

降低 TeamCity 拥有成本的因素:

  • 许可成本
  • 基础架构成本
  • 集成成本
  • 维护成本

易用性和支持

对于 CI/CD 解决方案供应商来说,在功能和用户体验之间找到最佳平衡是一大持续挑战。 为团队评估软件易用性时,应该考虑以下因素:

UI 一致性

随着项目规模的增大,CI/CD 在不增加多余复杂性的情况下提供必要功能变得越来越重要。 评估解决方案时,要确保最关键的功能由供应商提供,而不是由社区开发。

“一个竞品的 UI 非常不友好。 在 CI/CD 系统里,我应该感觉很踏实,做什么都不会坏。 我认为 TeamCity 的 UI 非常出色。 浏览的时候,你会相信系统运作良好。”
Steve Fortier,Gearbox 首席发布工程师

阅读完整案例研究

外部插件通常会导致导航问题、界面响应不佳、术语和图标冲突、屏幕尺寸和设备不匹配,以及缺少合适的文档。 无论团队经验如何,不一致的用户界面都会导致生产力下降。

无障碍功能

如果 CI/CD 系统支持无障碍功能,例如屏幕阅读器兼容、键盘导航和高对比度模式,通常可以表明其总体体验良好。

文档和支持

全面的文档、教程、视频和热心的社区对于有效使用 CI/CD 工具至关重要。 根据经验,解决方案在市场上推出的时间越长,您能够解决问题并获得答案的几率就越高。

API

根据团队的具体需求和待实现的工作流,您可能需要将 CI/CD 与外部工具集成。 这种体验可能会有很大差异,具体取决于 API 的成熟度、文档的可用性和质量,以及软件版本之间更改的速度。

直观的用户界面在 CI/CD 解决方案中至关重要,因为它可以帮助开发者轻松快速地理解和使用解决方案,即使流程较为复杂。

TeamCity UI 示例

托管模型

CI/CD 解决方案大致可以分为两类:云和本地部署。

云选项减轻了团队维护和扩缩 CI/CD 流程的负担,并允许在云中构建管道

本地部署解决方案则能让您在防火墙的安全保护下托管 CI/CD,遵循最严格的安全法规和要求。

总结

为组织选择 CI/CD 工具时需要考虑多重因素。 在这篇博文中,我们提供了在研究最适合团队或组织的选项时可能需要考虑的关键因素。

欢迎在下方评论区留言或分享问题。 我们很乐意为您提供解答。

构建快乐!🏗️

本博文英文原作者:

image description