Milvus PR 评论命令详解:用 /run-cpu-e2e 与 rerun ut 触发 CI 任务
【免费下载链接】milvusMilvus is a high-performance, cloud-native vector database built for scalable vector ANN search项目地址: https://gitcode.com/GitHub_Trending/mi/milvus
Milvus 仓库的 COMMAND_HELP.md 提供了基于 Pull Request 评论触发 CI 任务的完整命令清单。本篇将两条命令(/run-cpu-e2e与rerun ut)逐条落实到仓库中真实的 Jenkins Pipeline 与 GitHub Actions 工作流实现上,帮你理解每条命令背后的权限校验、任务编排与测试矩阵,从而在提交 PR 后能正确、高效地驱动集成测试与失败重跑。
命令总览与触发机制
COMMAND_HELP.md 给出了仓库支持的 PR 触发命令:
| Command | Description |
|---|---|
| /run-cpu-e2e | 触发基于 CPU 的 Jenkins e2e 测试任务 |
| rerun ut | 重新运行失败的 GitHub workflow 任务,包括 code checker 与单元测试 |
触发机制非常简单:当你在 Pull Request 下的评论内容与命令匹配时,对应的任务即被触发。两条命令分别落在两套不同的 CI 体系上:
/run-cpu-e2e对应 Jenkins 侧的 CPU E2E 流水线(定义在 ci/jenkins/PR.groovy);rerun ut对应 GitHub Actions 的 "Rerun Failure Checks" 工作流(定义在 .github/workflows/rerun-failure-checks.yaml)。
下面的小节分别深入这两条命令的实际实现。
/run-cpu-e2e:CPU 端到端测试流水线
流水线编排
/run-cpu-e2e触发的是 ci/jenkins/PR.groovy 定义的 Jenkins 任务。从源码结构看,该 pipeline 的关键设置包括:
- Kubernetes 动态代理:任务运行在 Kubernetes 集群(
cloud '4am')上拉起的临时 Pod 中,Pod 模板来自 ci/jenkins/pod/tekton-4am.yaml; - 资源与并发约束:设置了 4 小时超时(
timeout(time: 4, unit: 'HOURS'))、禁止并发构建(disableConcurrentBuilds(abortPrevious: true)),并通过throttleJobProperty将任务归入cpu-e2e节流类别,避免大量 e2e 任务挤占集群资源; - 日志归档:环境变量
LOKI_ADDR指向集群内的 Loki 服务(http://loki-1-loki-distributed-gateway.loki.svc.cluster.local),用于收集测试期间的服务日志。
三阶段执行流程
PR.groovy 的 stages 按顺序执行三个阶段(见 ci/jenkins/PR.groovy#L33-L145):
- meta 阶段:根据
CHANGE_ID判断是否为 PR 构建,决定 git 拉取模式(PR 用merge合并代码,非 PR 用fetch),并生成 helm release 名称; - build 阶段:通过
tekton.run触发镜像构建,编译命令为make clean && make jobs=8 install USE_ASAN=ON mode=RelWithDebInfo use_disk_index=ON,一次性产出milvus、pytest、helm三个镜像,并查询回milvus-image-tag等构建产物; - E2E Test 阶段:使用
tekton.pytest以 Helm 部署 Milvus 并运行 python 集成测试,ciMode设为e2e。
多部署形态的测试矩阵
E2E 测试并非单一形态,而是通过 matrix 对三种部署选项并行展开(见 ci/jenkins/PR.groovy#L89-L94):
| milvus_deployment_option | 形态 |
|---|---|
| standalone | 单机版部署 |
| distributed-pulsar | 分布式版(Pulsar 消息)部署 |
| standalone-kafka-mmap | 单机版 + Kafka + mmap 组合 |
每个矩阵分支执行完 pytest 后,还会在archive容器中归档部署产物、在jnlp容器中归档 pytest 日志(tekton.archive_pytest_logs),结果保存在 Pod 的临时卷(<pod-name>-volume-0)中,便于测试失败后回溯。
补充一点:如果 PR 修改了 Jenkins 相关 groovy 文件,.github/workflows/jenkins-checker.yaml 会在 PR 上自动调用 Jenkins 的 pipeline-model-converter 校验接口,保证.groovy文件语法合法——这是修改 CI 脚本时常见的失败原因之一。
rerun ut:重跑失败的 GitHub 检查
工作流实现
rerun ut命令由 .github/workflows/rerun-failure-checks.yaml 响应。该工作流在issue_comment事件(comment 创建)上触发,且仅当评论正文以rerun ut开头时才执行(startsWith(github.event.comment.body, 'rerun ut'))。
从源码结构看,工作流分为两步关键逻辑:
- 组织成员校验:用 secret
RERUN_BOT_TOKEN调用 GitHub API 的/orgs/{owner}/members/{login}接口,返回204说明评论者是组织成员,404则不是; - 分支处理:
- 非组织成员:通过
actions-cool/issues-helper回复评论,提示没有重跑权限,并建议联系@milvus-io/milvus-maintainers(见 .github/workflows/rerun-failure-checks.yaml#L26-L34); - 组织成员:调用
zymap/bot动作,以GITHUB_TOKEN为目标仓库milvus-io/milvus执行rerun_cmd: rerun ut,重跑该 PR 上失败的检查任务。
- 非组织成员:通过
也就是说,这条命令的权限被限定在组织成员范围内,外部贡献者评论rerun ut只会收到一条无权限提示,不会触发任何重跑。
它重跑的是什么
COMMAND_HELP.md 说明rerun ut覆盖 "code checker & unit tests" 两类任务。以 code checker 为例,.github/workflows/code-checker.yaml 在 PR 上运行make check-proto-product && make verifiers(见 .github/workflows/code-checker.yaml#L59-L63),并带有一个值得注意的触发路径过滤:只有改动internal/、pkg/、client/、cmd/、tests/go_client/等代码目录(且排除**.md)的 PR 才会运行该检查,纯文档修改不会触发。
verifiers目标本身的构成可以在根目录 Makefile 中确认(Makefile#L238):
verifiers: build-cpp getdeps cppcheck rustcheck fmt static-check即一次 code checker 检查会依次经历:C++ 核心构建、依赖拉取、C++ 检查(cppcheck)、Rust 依赖检查(rustcheck,作用于internal/core/thirdparty/tantivy/tantivy-binding/)、Go 格式检查(fmt,覆盖cmd/、internal/、tests/integration/、pkg/等目录,脚本为 scripts/gofmt.sh)以及静态检查(static-check,对根模块、pkg/、client/与tests/go_client分别运行 golangci-lint,配置分别为 .golangci.yml 和各子模块自己的配置文件)。
本地预跑:让 CI 失败前就发现问题
rerun ut的价值在于快速重跑,但更省时的做法是本地预跑同样的检查。仓库提供了与 CI 对齐的 Make 目标,开发者可以:
# 本地运行与 CI code checker 一致的校验链 make verifiers # 自动修复格式与 lint 问题(gofumpt + gci + golangci-lint --fix) make lint-fixlint-fix目标会安装并运行 gofumpt、gci(导入排序,按 standard / default /prefix(github.com/milvus-io)自定义顺序)以及 golangci-lint 的自动修复(见 Makefile#L195-L224),是提交 PR 前清理格式问题的推荐流程。此外,仓库还附带了 git hooks 方案:按 githooks/README.md 安装git-hooks后执行git hooks install,即可在本地 commit/push 前执行pre-commit/fmt与pre-push/verifiers,与 CI 的校验内容保持一致。
使用要点小结
- 命令必须精确匹配:
rerun ut要求评论以该字符串开头(工作流用startsWith匹配);/run-cpu-e2e则按 COMMAND_HELP.md 的命令约定匹配。 - 权限边界:
rerun ut仅对组织成员生效,外部贡献者会收到无权限回复,需要维护者协助。 - 耗时预期:CPU e2e 流水线整体超时上限为 4 小时,且包含镜像构建与三种部署形态的并行 pytest,属于重型任务;日常格式/静态问题应先用
make verifiers本地拦截,而不是反复依赖 CI 重跑。 - 关联文件索引:命令定义在 COMMAND_HELP.md,Jenkins 侧实现在 ci/jenkins/PR.groovy,GitHub 侧重跑逻辑在 .github/workflows/rerun-failure-checks.yaml,检查目标定义在 Makefile 与 .github/workflows/code-checker.yaml 中,可按需深入。
【免费下载链接】milvusMilvus is a high-performance, cloud-native vector database built for scalable vector ANN search项目地址: https://gitcode.com/GitHub_Trending/mi/milvus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考