
在 DevOps 和开发者体验(DevXP)领域,速度和效率对工程师的日常任务影响重大。今天,我们将深入探讨 Slack 的 DevXP 团队如何利用现有工具优化端到端(E2E)测试管道。这一优化降低了构建时间,减少了冗余流程,为 Slack 的工程师节省了时间和资源。
对于我们最大的代码仓库之一(单体仓库),Slack 设有一个 CI/CD 管道,在将代码合并到 main 分支之前运行 E2E 测试。这对于确保 Slack 应用程序的整个技术栈(前端、后端、数据库以及中间的多项服务)变更得到验证至关重要。然而,我们发现了一个瓶颈:构建前端代码耗时超出预期,且频率过高,即使在没有前端相关变更的情况下也是如此。具体流程如下:
整个过程每次运行约需 10 分钟。其中约 5 分钟被前端构建占用,即使不涉及前端变更。
考虑到每天有数百个拉取请求(PR)被合并,这些冗余构建不仅耗时,而且成本高昂:
main 分支相比不包含前端变更,导致数 TB 的重复数据。为解决此问题,我们利用现有工具重新思考构建策略。
我们的第一步是确定是否需要新的前端构建。我们通过使用 git diff 及其三点表示法来检测变更,识别当前检出分支与 main 分支最新共同提交之间的差异。如果检测到变更,则触发前端构建任务;如果未检测到变更,则完全跳过构建并重用预构建版本。
当不需要前端构建时,我们从 AWS S3 定位现有构建。为提高效率,我们使用仍在生产环境中的近期前端构建。我们将为 E2E 测试提供预构建前端资产的任务委托给内部 CDN。这减少了在每个 PR 上创建新构建的需求,同时确保我们在当前资产上进行测试。
虽然方法看似直接,但将该解决方案扩展到我们的单体仓库面临了一些挑战:
我们的努力取得了显著成效:
两个意外成果:
通过战略性地利用 git diff 和内部 CDN 等现有工具,我们成功节省了宝贵的开发者时间,降低了云成本,并提高了整体构建效率。
对于其他公司面临 DevOps 和 DevXP 类似瓶颈的团队,教训是质疑管道中真正必要的部分并进行相应优化。此项目的改进事后看来似乎显而易见,但在未完全失效的系统中,低效常被忽视。在我们的案例中,重新思考前端资产处理方式为组织带来了巨大成功。
此类项目涉及许多动态部分:构建和测试的复杂管道、云基础设施、内部 CDN、前端代码的复杂构建系统以及整个系统中的现有自定义设置。它包括用 Python、JavaScript、Bash、PHP/Hack、Rust、YAML 和 Ruby 编写的代码。我们在几乎无停机的情况下实现了这一目标!好吧,几乎是。部署管道内部有十分钟的停机时间,但很快得到修复。
此项工作离不开以下人员的贡献:
Anirudh Janga、Josh Cartmell、Arminé Iradian、Anupama Jasthi、Matt Jennings、Zack Weeden、John Long、Issac Gerges、Andrew MacDonald、Vani Anantha 和 Dave Harrington
有兴趣承担有趣项目、让人们的职场生活更轻松,或只是构建一些很酷的表单吗?我们正在招聘!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。