预提交缓慢排查指南
Beam 预提交作业是在 Jenkins 构建机器上为提交到 apache/beam 的每个拉取请求 (PR) 自动运行的测试套件。有关更多信息以及预提交和提交后提交之间的区别,请参阅 测试。
什么是快速预提交?
预提交测试是在合并拉取请求 (PR) 之前必须通过的测试。当这些测试速度慢时,它们会减慢 Beam 的开发过程。目标是让 95% 的预提交作业在 30 分钟内完成(无论成功或失败)。
从技术上讲,过去 4 周的运行时间第 95 个百分位数应低于 30 分钟,其中运行时间是作业在 Jenkins 队列中花费的时间 + 实际运行时间。
确定缓慢
有两个主要迹象表明速度慢
- 预提交作业在 30 分钟后超时。这可以从作业的控制台日志中确定。
- 预提交没有超时,但预提交结果的总等待时间 >30m。
预提交仪表盘
Beam 社区指标网站包含一个 预提交测试 仪表盘,显示作业时间趋势。您可以修改时间窗口(默认值为 7 天)或通过单击特定测试套件来过滤到特定测试套件。
排查流程
- 组件:测试,任何其他相关内容
- 标签:precommit
- 在描述中引用此页面。
- 确定缓慢的来源并识别问题。如果需要(例如多个问题),请打开其他问题。
- 根据情况分配问题,例如分配给测试或 PR 的作者。
解决
快速修复缓慢的预提交测试非常重要。有关详细信息,请参阅 预提交测试策略。
可能的因素和解决方案
本节列出了一些修复预提交缓慢的起点。
资源耗尽
查看 Jupyter 笔记本中的图表。总持续时间的上升是否与排队时间的上升相匹配?如果是,则缓慢可能与特定预提交作业无关。
总持续时间和排队持续时间一起上升和下降(大部分)的示例:
由于 Jenkins 机器是有限的资源,其他作业会影响预提交排队时间。尝试找出其他作业是否最近变慢、频率增加或引入了新作业。
另一个选择是考虑添加更多 Jenkins 机器。
单个测试缓慢
有时,预提交作业会因一个或多个测试而变慢。确定这种情况的一种方法是查看单个测试时间。
在哪里查找单个测试时间
- 查看预提交作业的 Jenkins 页面上的“Gradle 构建扫描”链接。此页面将包含仅限 Java 测试的单个测试时间(2018-08)。
- 查看预提交作业的 Jenkins 页面上的“测试结果”链接。这应该适用于 Java 和 Python 测试(2018-08)。
有时可以通过重构来加快测试速度。花费大量时间等待的测试(例如集成测试)可以与其他测试同时运行。
如果确定测试速度太慢而无法作为预提交测试的一部分,则应将其从预提交中删除并放到提交后提交中。此外,请确保删除的测试覆盖的代码 由预提交中的单元测试覆盖。
集成测试缓慢
集成测试缓慢可能是由依赖服务造成的。
参考资料
上次更新于 2024/10/31
您是否找到了您要找的所有内容?
所有内容是否有用且清晰?您想更改任何内容吗?请告诉我们!