开发者概览

Velox 后端 CI

qianmoQqianmoQ· 更新于 2026-10-02· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

GitHub Actions (GHA) 工作流定义在 .github/workflows/ 下。

Docker 构建

在 docker_image.yml 中定义的每周任务会构建用于 CI 验证的 Docker 镜像。Dockerfile(位于 dev/docker/ 下)及其对应的镜像如下:

文件镜像说明
Dockerfile.centos7-gcc13-static-buildapache/gluten:vcpkg-centos-7-gcc13centos 7,静态链接,jdk8
Dockerfile.centos8-gcc13-static-buildapache/gluten:vcpkg-centos-8-gcc13centos 8,静态链接,jdk8
Dockerfile.centos8-dynamic-buildapache/gluten:centos-8-jdk8centos 8,动态链接,jdk8
Dockerfile.centos8-dynamic-buildapache/gluten:centos-8-jdk11centos 8,动态链接,jdk11
Dockerfile.centos8-dynamic-buildapache/gluten:centos-8-jdk17centos 8,动态链接,jdk17
cudf/Dockerfile.centos-9-jdk17-cuda13.1-cudfapache/gluten:centos-9-jdk17-cuda13.1-cudfcentos 9,动态链接,jdk17

Docker 镜像可以在 https://hub.docker.com/r/apache/gluten/tags 找到。

Vcpkg 缓存

在 Docker 中进行静态构建期间会拉取 Gluten 主分支,vcpkg 会为 dev/vcpkg 下定义的所有依赖缓存二进制数据。这些二进制数据会被缓存到 /var/cache/vcpkg 中,后续的 CI 任务可以在构建时重复使用。在环境中设置 VCPKG_BINARY_SOURCES=clear 可以禁用 vcpkg 缓存的复用。

Arrow 库预安装

Arrow 库已预安装在 Docker 镜像中,因为它们不常变化,无需每次运行都重新构建。

.M2 缓存

依赖库通过 mvn dependency:go-offline 预安装到 /root/.m2 中。Spark 默认设置为 3.5。

Ccache

由于 Docker 镜像每周都会重新构建,ccache 大多已过期,因此已将其从镜像中移除。

更新 Docker 镜像

GitHub secrets DOCKERHUB_USER 和 DOCKERHUB_TOKEN 用于将 Docker 镜像推送到 Docker Hub。请注意,来自 fork 仓库的 PR 中无法访问 GitHub secrets。

Delta Spark 单元测试

delta_spark_ut.yml 针对 Gluten Velox 打包版本运行 delta-io/delta 自带的 spark 测试套件,从而让 Gluten 针对真实的 Delta 发布版本进行验证。目前其中有不少测试失败。这并不是因为 Gluten 拒绝下推某个计划——那样应该回退到原生 Spark,测试仍然应当通过。其中一部分是真实存在的缺陷(本应回退却未回退、指标与原生 Spark 不一致、原生侧 bug),另一部分则是预期行为:断言查询计划的测试在扫描或算子被下推后会看到不同的计划,这是设计使然而非缺陷。因此,该任务并不会因为“任意失败”就判定失败:它会将每次运行的结果与 .github/workflows/util/delta-spark-ut/known-failures.txt 中已提交的已知失败基线进行比对,只有出现新失败、或者某个基线测试开始通过(意味着需要更新基线)时才判定失败。如果某次运行没有产生可用结果——JUnit 报告缺失或被截断,或者分片数少于预期——也会直接判定失败,而不是基于不完整的数据判定通过。

它仅在 Delta 相关路径发生变更时按 PR 运行(gluten-delta/**、backends-velox/src-delta*/** 或流水线自身的文件),每天 UTC 05:00 夜间运行以实现完整覆盖,并可通过 workflow_dispatch 按需运行——在合并前请使用手动运行,用以检验 Velox/core 的变更与 Delta 的兼容性。

修复问题后若要刷新基线,请使用 update_baseline=true 运行该工作流,下载 delta-spark-ut-known-failures 产物,并用其中包含的 known-failures.txt 替换仓库中的 .github/workflows/util/delta-spark-ut/known-failures.txt。关于门禁、不稳定测试的隔离以及基线的初始化,请参见 .github/workflows/util/delta-spark-ut/README.md。尚未完成的后续事项记录在 devlive-community/knowforge#12743。

评论

登录后参与评论

正在加载评论…