Go Wiki: DashboardBuilders
LUCI Builders
Go 团队已将其测试流水线从自定义解决方案(协调器)迁移到 LUCI。 LUCI 是由 Google Chrome 开源团队创建的开源持续集成系统。Go 团队采用 LUCI 是为了利用一个被更多开发者使用和支持的持续集成解决方案。这将使团队能够为社区提供功能更丰富的解决方案。
LUCI 系统要求构建器运行两个应用程序,它们会向 LUCI 进行身份验证并接收和处理构建。LUCI token daemon 生成进行身份验证所需的令牌。swarming bot 使用该令牌连接到 LUCI 并处理构建。
构建器要求
- 能够连接到以下地址的互联网连接
- https://proxy.golang.org(或通过 GOPROXY 的替代代理)。
- https://luci-token-server.appspot.com
- https://chromium-swarm.appspot.com
- https://cr-buildbucket.appspot.com
- https://7419-34ac013-dot-chromium-swarm.appspot.com(未来可能更改?)
- https://remotebuildexecution.googleapis.com
- https://storage.googleapis.com(用于 gomote 创建)
- 资源
- 至少 512MB 内存。强烈推荐 1GB 或更多。
- 20GB 磁盘空间是理想的。
- 最好有 2 个或更多(虚拟)CPU。
- 安装 Python 3,并使其在
PATH
(或等效路径)下以python3
(或 Windows 上的python3.exe
)名称可用。 - 权限
- bot 应以
swarming
用户身份运行(无 root 权限)。 - bot 会自动更新自身。它应具有进行此操作的权限。
- bot 会定期重启机器。它应具有进行此操作的权限(通过 sudo)。
- 在 Docker 中,您可以将关机命令替换为 从内部重启容器的 shell 脚本(示例)。
- 如果机器因某种原因无法重启,请设置环境变量
SWARMING_NEVER_REBOOT
。
- bot 应以
如何设置构建器
-
在 Go Issue Tracker 上 创建一个 issue,请求添加一个新的构建器并自行分配。
- issue 的标题应为格式:
x/build: add LUCI <os-arch> builder
。 - 选择一个主机名并在 issue 正文中说明其值。主机名应遵循以下格式:
<GOOS>-<GOOARCH>-<维护者的 GitHub handle>
。如果名称有冲突,Go 团队可能会要求更改。 - 添加“new-builder”标签。(您可以在 issue 中发布评论
@gopherbot, please add label new-builder.
,让 gopherbot 为您添加。)
- issue 的标题应为格式:
-
使用
golang.org/x/build/cmd/genbotcert
生成证书签名请求(hostname.csr)和 TLS 私钥(hostname.key),并使用(预先选择的)主机名作为输入。为证书签名请求添加 .txt 扩展名(hostname.csr.txt)并将其附加到 GitHub issue。团队成员将把生成的证书(hostname.cert)附加到 GitHub issue。genbotcert -bot-hostname <hostname>
-
Go 团队成员将在 LUCI 中定义您的新构建器。完成后将向 issue 添加评论。
-
Machine Token Daemon 与 Token Server 通信,以生成和续订 LUCI 机器令牌。安装
go.chromium.org/luci/tokenserver/cmd/luci_machine_tokend
并配置它通过 cron 每 10 分钟运行一次。私钥不应被swarming
用户读取,因此 cron 作业应以单独的用户身份运行。luci_machine_tokend -backend luci-token-server.appspot.com -cert-pem <path-to-the-certificate> -pkey-pem <path-to-the-private-key> -token-file=/var/lib/luci_machine_tokend/token.json
- 如果 /var/lib 不是令牌的合适位置,请根据需要进行更改,并在调用下面的
bootstrapswarm
时将环境变量LUCI_MACHINE_TOKEN
设置为文件路径。
-
安装
golang.org/x/build/cmd/bootstrapswarm
并将其配置为在您的操作系统进程管理器(systemd 等)下作为swarming
用户无限循环运行。Bootstrapswarm
下载 swarming bot 的初始版本并确保其始终运行。bootstrapswarm -hostname <hostname>
-
在日志中验证 bot 是否在没有错误的情况下启动。
安全注意事项
通常,低容量构建器仅运行已审查并已提交的代码(post-submit 测试)。我们仅为 Go 团队运行且拥有大量可用硬件的构建器启用 pre-submit 测试。但是,Gomote 工具 可供 Go 团队和 Go 社区中的许多人使用,该工具允许他们对构建器进行任意访问,用于开发和调试。
出于安全考虑,您可能希望在无法访问任何内部资源的隔离网络中运行构建器。
Coordinator Builders (遗留)
本节介绍了 Go 项目在迁移到 LUCI 之前使用的自定义测试解决方案。
此处列出了构建配置(顶部)和主机配置(底部)
https://farmer.golang.org/builders
构建器运行在特定的主机类型上。(例如,linux-386-387
是一个构建类型。它运行在 host-linux-kubestd
,一个基于 Kubernetes 的 linux/amd64 主机上)
它们来自文件 https://cs.opensource.google/go/x/build/+/master:dashboard/builders.go
有关协调器的设计详细信息,请参阅 https://go-lang.org.cn/s/builderplan
有关构建器机器、运行数量及其状态的信息,请访问 https://farmer.golang.org/
此内容是 Go Wiki 的一部分。