Go Wiki:SlowBots
Go 构建系统支持“SlowBots”,这是一种配置 TryBots(提交前构建器)的方法,可以将额外的构建器添加到 TryBots 通常运行的构建配置集中。
通常,TryBots 只运行快速且弹性配置的内容。也就是说,TryBots 运行可在 Google Cloud 上使用的端口的测试,我们在那里拥有大量的容量,可以随意启动许多虚拟机,广泛地分片测试执行,以便 TryBots 在 5-10 分钟内完成。
但有时这还不够。SlowBots 允许您声明您可以在某些特定构建器可用之前等待很长时间。(某些配置通常只有一个物理机器,而且通常工作积压,并且该构建器也可能很慢。)
使用 SlowBots
单击提交消息下的“选择 Tryjobs”,将出现一个对话框。
该对话框将要求您单击要针对您的 CL 运行的构建的复选框。对主 Go 存储库的典型 CL 通常需要以 gotip-
开头的构建器。请参见下文了解有关选项的更多详细信息。
选择要运行的构建后,有两种方法可以触发测试运行
- 阻塞:这是推荐的方法。将对话框中显示的
Cq-Include-Trybots
git 页脚添加到提交消息的最后一段。对于通过 github 发送的 CL,它可以在 github PR 的描述中的任何位置出现。上传带有更新提交消息的补丁集后,照常投票Commit-Queue+1
。其他构建与默认 TryBots 完全相同:失败将阻止提交并发送电子邮件通知,并且构建将在后续补丁集中自动运行(只要保留Cq-Include-Trybots
行)。请注意,如果Cq-Include-Trybots
git 页脚不在提交消息的最后一段,则不会使用它。也就是说,它必须紧挨着Change-Id
行,中间没有空行(请参见下面的屏幕截图)。 - 仅建议性:单击“添加”按钮将立即开始运行测试(即使没有
Commit-Queue+1
投票)。这些完全是一次性的建议性构建。状态和结果将显示在“检查”部分(请参见下面的屏幕截图),但失败的结果不会阻止提交或发送电子邮件通知。当上传新的补丁集时,这些构建不会自动再次运行。
审阅者工作流程
作为审阅者,您无法编辑提交消息。如果您正在审阅的 CL 应该运行 SlowBots,我们建议您遵循以下工作流程
- 在“选择 Tryjobs”对话框中选择所需的构建。
- 单击“添加”立即启动构建。
- 在提交消息中添加一条未解决的注释,要求所有者将对话框中的确切
Cq-Include-Trybots
行添加到提交消息中。
(2)将根据测试结果提供即时反馈,而无需等待所有者上传新的补丁集,而(3)将确保测试在将来的补丁集中继续运行并阻止提交。
注意:https://crbug.com/40287467 跟踪 LUCI 中此流程的改进,以减少工作量。
SlowBot 名称
每个构建的名称大致指示它将执行的操作,但下面提供了一些更详细的信息
- 构建可能以
x_$REPO
开头,其中$REPO
是某个模块,例如golang.org/x/$REPO
(例如x_review-gotip-linux-amd64
)。此构建将在该存储库中运行测试。如果 CL 适用于主 Go 存储库,它将针对该版本的 Go 测试$REPO
的当前HEAD
。 - 如果构建不以
x_$REPO
开头(例如gotip-linux-amd64
),则它们正在测试主 Go 存储库(包括标准库和工具链)。 - 然后构建始终列出要构建的目标 Go 版本,例如
gotip
或go1.21
。前者针对主 Go 存储库的master
分支构建,而后者针对相应发行分支的HEAD
构建。如果 CL 适用于$REPO
,则$REPO
的测试将在相应主 Go 存储库分支的HEAD
上运行。 - 然后构建列出要测试的操作系统和 CPU 架构(具体来说,是
GOOS
和GOARCH
)。 - 最后,构建列出一些修改,例如
gotip-linux-amd64-longtest-race
。下面列出了一些修改及其含义longtest
运行相应平台和存储库的完整测试套件。race
在竞争检测器下运行测试。misccompile
将为所有受支持的平台交叉编译所有包(包括测试包)作为冒烟测试。这些构建的平台仅是交叉编译的“主机”平台。
当前列出的可能构建数量远多于实际支持或有效的构建数量。
以下是一些关于哪些 SlowBots 将按预期工作的一般指南
- 如果您正在为
golang.org/x/$REPO
存储库之一的 CL 运行 SlowBots,则所有x_$REPO-.*
构建器都将按预期工作。其他构建将失败。 - 如果您正在为主 Go 存储库的 CL 运行 SlowBots,则每个与 CL 所在分支匹配的构建都将按预期工作。例如,如果您有一个针对
master
分支的 CL,则每个名称包含gotip
的构建都将按预期工作(x_tools-gotip-linux-amd64
、gotip-windows-amd64
等)。如果您有一个针对release-branch.go1.21
分支的 CL,则每个名称包含go1.21
的构建都将按预期工作(x_tools-go1.21-linux-amd64
、go1.21-windows-amd64
等)。
待办事项:自动将这些指南用作筛选器。
Pre-LUCI SlowBots
我们目前正在迁移到 Chromium 项目创建的新开源 CI 系统 LUCI 的过程中。以上说明描述了如何在 LUCI 上运行 SlowBots,但并非所有端口都已迁移到 LUCI。在此期间,这些端口仍可在旧的基础设施上使用。以下是有关如何在旧基础设施上使用 SlowBots 的说明。
- 使用 Gerrit Web UI 回复并选择
Run-TryBot
=+1
而不是Commit-Queue
=+1
。 - 在单击“发送”之前,在评论部分(在显示说些好话…的地方)编写一个魔法注释
TRY=ppc64le, freebsd, netbsd-386, ios, linux-arm64-packet
…其中 TRY=
后的术语为
GOOS
(选择最佳项)GOARCH
(选择最佳项)GOOS-GOARCH
(选择最佳项)specific-builder-name
(通过其确切名称显式指定;请参阅https://farmer.golang.org/builders处的完整列表)
对于主 Go 存储库,TRY=
后的术语也可以是
x/repo
,其中repo
是应执行其测试的golang.org/x
存储库之一。这将为给定的存储库运行默认构建器(截至撰写本文时为linux-amd64
)。x/repo@builder
,其中repo
如上所述,builder
是构建器列表中的构建器名称。例如,x/sys@linux-arm64-aws
。
稍后再次运行 TryBots 时,将使用当前补丁集上最新的 TRY=
注释。要将其关闭,请在等号后面使用空字符串设置 TRY=
。如果当前补丁集没有 TRY=
注释,则将使用最新的 TRY=
注释。
Pre-LUCI SlowBots 的陷阱
- 如果
TRY=
注释不在启动 TryBots 的同一注释上,则会被忽略 - 如果已存在 TryBot-Result,则 TryBots(和 SlowBots)不会运行
git-codereview mail
工具的-trybot
标志尚不支持此功能,因此请使用 Web UI。- 如果 TryBots 正在运行,则删除
Run-TryBot+1
投票并重新执行它不会重新启动 TryBot 集,因此它不会查看您的 TRY= 行,直到下次运行完成时。(但您需要以某种方式删除 TryBot-Result:手动、重新基准、上传新版本) - 如果您选择了一个脱机的构建器,它目前只会无限期地等待它出现。还没有超时。
- 如果您指定了一个未知的
TRY=
令牌,它只会忽略它,并且不会报告错误。 - 没有
all
别名。这在某种程度上是有意的,以防止过度使用可能导致 SlowBots 对所有人来说变得更慢。但我们以后可能会添加它。请参阅golang.org/issue/34501#issuecomment-544585711。
此内容是 Go Wiki 的一部分。