Go Wiki: DashboardBuilders
LUCI 构建器
Go 团队已将测试流水线从定制解决方案 coordinator 迁移到 LUCI。LUCI 是由 Google 的 Chrome 开源团队创建的开源持续集成系统。Go 团队采用 LUCI 的目的是利用一个由更广泛的开发者群体使用和支持的持续集成解决方案。这应该能使团队为社区提供一个功能更丰富的解决方案。
LUCI 系统要求构建器运行两个应用程序,这两个应用程序用于向 LUCI 进行认证,并接收和处理构建。LUCI 令牌守护程序(LUCI token daemon)生成认证所需的令牌。swarm 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,请求添加新的构建器,并将其分配给自己。
- issue 的标题格式应为:
x/build: add LUCI <os-arch> builder
。 - 选择一个主机名并在 issue 正文中说明其值。主机名应遵循以下格式:
<GOOS>-<GOOARCH>-<维护者的 GitHub 句柄>
。如果名称有冲突,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
并配置它每 10 分钟通过 cron 运行一次。私钥不应该由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
并将其配置为以swarming
用户身份在操作系统的进程管理器(systemd 等)下循环运行。Bootstrapswarm
下载 swarming bot 的初始版本并确保其始终运行。bootstrapswarm -hostname <hostname>
-
验证 bot 在日志中没有出现任何错误地启动。
安全注意事项
通常,低容量构建器仅运行已评审并提交的代码(提交后测试)。我们仅为拥有大量硬件资源的 Go 团队运行的构建器启用提交前测试。然而,Gomote 工具可供 Go 团队和 Go 社区中的许多人使用,使他们能够任意访问构建器以进行开发和调试。
出于谨慎考虑,您可能希望在隔离的网络中运行构建器,该网络无法访问您的任何内部资源。
协调器构建器(旧版)
本节描述了 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
有关 coordinator 的设计详情,请参阅 https://go-lang.org.cn/s/builderplan
关于构建器机器、运行数量及其状态的信息可以在 https://farmer.golang.org/ 找到。
此内容是 Go Wiki 的一部分。