Milvus PR 评论命令详解:用 /run-cpu-e2e 与 rerun ut 触发 CI 任务
2026/9/8 20:40:39 网站建设 项目流程

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-e2ererun ut)逐条落实到仓库中真实的 Jenkins Pipeline 与 GitHub Actions 工作流实现上,帮你理解每条命令背后的权限校验、任务编排与测试矩阵,从而在提交 PR 后能正确、高效地驱动集成测试与失败重跑。

命令总览与触发机制

COMMAND_HELP.md 给出了仓库支持的 PR 触发命令:

CommandDescription
/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):

  1. meta 阶段:根据CHANGE_ID判断是否为 PR 构建,决定 git 拉取模式(PR 用merge合并代码,非 PR 用fetch),并生成 helm release 名称;
  2. build 阶段:通过tekton.run触发镜像构建,编译命令为make clean && make jobs=8 install USE_ASAN=ON mode=RelWithDebInfo use_disk_index=ON,一次性产出milvuspytesthelm三个镜像,并查询回milvus-image-tag等构建产物;
  3. 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'))。

从源码结构看,工作流分为两步关键逻辑:

  1. 组织成员校验:用 secretRERUN_BOT_TOKEN调用 GitHub API 的/orgs/{owner}/members/{login}接口,返回204说明评论者是组织成员,404则不是;
  2. 分支处理
    • 非组织成员:通过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-fix

lint-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/fmtpre-push/verifiers,与 CI 的校验内容保持一致。

使用要点小结

  1. 命令必须精确匹配rerun ut要求评论以该字符串开头(工作流用startsWith匹配);/run-cpu-e2e则按 COMMAND_HELP.md 的命令约定匹配。
  2. 权限边界rerun ut仅对组织成员生效,外部贡献者会收到无权限回复,需要维护者协助。
  3. 耗时预期:CPU e2e 流水线整体超时上限为 4 小时,且包含镜像构建与三种部署形态的并行 pytest,属于重型任务;日常格式/静态问题应先用make verifiers本地拦截,而不是反复依赖 CI 重跑。
  4. 关联文件索引:命令定义在 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询