如何全面改进构建自动化性能?

Blog
Author:
Guy GolanGuy Golan
Published On:
5月 18, 2021
Estimated reading time:
1 minute

运行自动化构建时,最难熬的莫过于需要长时间盯着一个耗时的运行步骤。技术时代,计算资源随手可得,我们没有理由因构建性能而低头。仔细研究整个自动化构建管道,我们可以发现一些小窍门。只需一些小小的改动便可‘牵一发动全身’,帮助我们节省大量的时间。

纵向扩展还是横向扩展?

这个问题,在我们想提高自动化性能时经常遇到。需要获取更多构建资源时,你是选择纵向开发现有存储容量还是横向扩充硬件?另外,这些额外资源的成本与省下时间成本,孰轻孰重?这些都是选择时应该考虑的问题。

借助纵向扩展,我们可以有效减少构建时间,这归功于调用的额外 CPU。同理,横线扩展也可以帮助并行运行更多的构建,疏通因缓慢编译而停滞的自动化管道。不过,在思考优化构建性能的方法时,学会打破框架很重要。

一些工程师选择使用构建代理。不过,相比于他们需要运行的任务,这些构建代理往往过于庞大。代理同时管理着多个实例,帮助调节资源。此外,这种增加代理的方法还可以保持构建功能的一致性。

更为独立

Automated build - dependencies

依赖项恢复常常因受阻的构建步骤而停滞,从第三方下载依赖项时更是如此。有时构建代理可能无法解析这些组件。例如,数据中心中断、网络拥塞或安全约束可能会限制即时访问。

nuget 包为例。如今,许多应用程序对在执行 nuget restore 命令期间检索的组件有某种依赖性。构建代理可以缓存各种包,而无需再从外部访问。因此,无法访问存储库造成构建失败的可能性大大降低。另外,这些包都是本地可用,完成整个构建进程的时间也能因此缩减。

更加动态

还有一些其他方式可以帮助扩展,同时为构建代理提供预装工具。利用构建服务器的动态池,我们可以在编译和发布期间启动环境,而避免了占用计算时间。在云环境中使用构建服务器的情况下,相当于增加了数千美元云预算。

创建动态构建服务器有很多中方式。在 Azure 中,ARM 模板可以帮助确保正确的操作系统,并以编程方式设置大小。通过机器映像模板,其他云服务和 VMware 也存在类似的映像。使用多种云自动构建环境中的团队,也可以利用 Terraform 自动化动态基础设施,提升效益和效率。

最后,使用 Docker 容器和 Docker Registry 可以优化现有资源使用。将这些容器看作是小型的、独立构建的服务器,其中包含完成任务所需的所有内容。以恢复 npm 文件的自动化构建任务为例,Docker 可以将文件“缓存”在映像中,而不用在每个构建中一一进行检索。

相关阅读:
Docker vs VM
Docker vs Kubernetes ——对立还是统一?

构建代理让闲置 CPU 焕发新活力

如果将业务环境中现有的所有基础设施纳入考虑范围,我们的选择也就更多了。处于空闲状态的工作站都可以调用起来,以辅助并优化自动构建性能。只要没有太多的日常管理费用,使用率低的服务器就可以作为一个额外的代理运行。

重新调整硬件使用背后的原理可能并不新奇,但对自动化工程师来说,高效调用闲置资源的技术无疑是最前沿的。这种技术可以获取本地和云中可用的所有空闲内核资源,以“数字化团队工作”的方式分配工作负载。每个可用节点中的额外CPU 将应用于构建进程,这些构建往往包含多个并发进程。这意味着每个节点都可以可以调用其他节点的资源,工作负载在数百个核心上并行运行。本质上来说,这相当于为自动化构建创建了一个虚拟的超级计算机。

这种分配任务的方法大大提高了效率。但是,它的设置和维护可能非常麻烦。保证随时准确追踪自动构建能力并不容易,大部分产品都是一半靠分析,一半靠猜测。因此,只有真正能协调这一复杂过程的产品,才有商业价值。

这正是 Incredibuild 的进程虚拟化技术发挥真正价值的地方。除了可以加速编译、测试周期和 CI 耗时活动外,Incredibuild 还能确保整个进程的安全性,让一切都像在本地运行一样。而实现这些操作,只需简单执行轻量级代理,就能满足现有和未来的构建需求。整个过程不需要更改构建脚本、文档化流程或现有的工具链。点击链接,了解更多信息。

Ninja Theory 使用虚幻引擎的困境

Ninja Theory 游戏工作室的经验,是分布式构建如何通过大幅优化自动构建性能,节省宝贵的开发时间最佳案例。Ninja Theory 使用虚幻游戏引擎制作了一系列广受好评的游戏。然而,由于他们使用虚幻引擎 4,构建时间难以避免地拉长,这正是他们面临的巨大问题。

考虑到这一点,这个由 30 名开发人员组成的小团队需要更多的支持,以减少编译时间,保证更多的创作时间。除了在他们的环境中构建服务器之外,共享工作负载的分布式方法真正发挥了功效。

他们的自动构建管道从每台机器 56 分钟的时间减少为 8 分钟。仅仅通过更有效地利用现有资源,时间就惊人地减少了 90%。更多关于使用分布式处理如何帮助 Ninja Theory 缩短构建时间的内容,点击链接阅读。

这样振奋人心的数据,也体现了这种技术在未来的前景。越来越多的公司将了解到他们还有很多未使用的资源,而这些资源可以再次利用,焕发新的活力。开发人员,则将享受额外的时间,不断创新产品,而不是枯燥地守着构建进程。

点击链接,阅读更多关于这项技术的信息,了解它将如何颠覆团队的自动构建性能。

pipelines