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
等)。
待办事项:自动应用这些指南作为过滤器。
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=
评论。
LUCI 之前的 SlowBots 的陷阱
TRY=
评论如果不在启动 TryBots 的同一条评论中,则会被忽略。- 如果已经存在 TryBot 结果,TryBots(和 SlowBots)将不会运行。
git-codereview mail
工具的-trybot
标志尚不支持此功能,请使用 Web UI。- 如果 TryBots 已经在运行,删除
Run-TryBot+1
投票并重新执行它不会重新启动 TryBot 集,因此它不会查看您的 TRY= 行,直到下一次运行时才完成。(但您需要以某种方式删除 TryBot 结果:手动、变基、上传新版本) - 如果您选择了一个离线构建器,它目前将永远等待它出现。还没有超时。
- 如果您指定了一个未知的
TRY=
令牌,它将被忽略,而不会报告错误。 - 没有
all
别名。这在一定程度上是故意的,以防止过度使用导致 SlowBots 对所有人来说变得更慢。但我们可能稍后会添加它。请参阅 golang.org/issue/34501#issuecomment-544585711。
此内容是 Go Wiki 的一部分。