执行摘要
- 一句话:修复自托管CI节点因root权限残留文件导致的Docker构建工作流失败。
- 推荐动作:该PR是典型的CI基础设施修复,逻辑简单直接。对于负责CI/CD的工程师,值得快速浏览以了解自托管runner共享工作空间时的权限处理模式。关注点在于
sudo rm -rf的使用场景和与pr-test.yml的现有方案的一致性。无需深入源码级分析。
功能与动机
PR body明确指出,nightly的'Build and Push Development Docker Images'工作流(以及相关兄弟工作流)在actions/checkout@v4步骤失败,错误为'EACCES: permission denied, rmdir '.../sgl-kernel/build/.cmake''。根本原因是自托管runner(如labubu)同时携带arm-docker-build-node和arm-kernel-build-node标签(x64节点同理),这些工作流共享同一个_work目录。sgl-kernel/build.sh在容器内以root身份运行,导致生成的文件在宿主机上归root所有,后续工作流无法删除这些文件。pr-test.yml中已经为kernel-build作业处理了此问题,本PR将相同的sudo rm -rf步骤镜像到所有docker-build-node工作流中,防止它们互相干扰。
实现拆解
- 识别问题工作流:分析哪些工作流使用
x64-docker-build-node或arm-docker-build-node标签,并可能因共享工作空间而失败。确定了5个目标文件:release-docker-dev.yml(nightly构建)、release-docker.yml(标签发布)、release-docker-runtime.yml(runtime镜像发布)、trivy-scan-dev.yml(漏洞扫描)、patch-docker-dev.yml(手动补丁工作流)。
- 添加清理步骤:在每个目标工作流的
jobs中,在actions/checkout@v4步骤之前,插入一个名为“Cleanup workspace (remove root-owned files from prior runs)”的步骤,执行sudo rm -rf "$GITHUB_WORKSPACE"/* || true。这确保了工作空间目录在检出前被彻底清空,即使有root所有权的残留文件也能被删除。
- 保持一致性:清理步骤的添加位置和命令与
pr-test.yml中已有的处理方式(第431行和第479行)保持一致,确保解决方案的统一性。
- 排除非目标工作流:
create-manifests作业运行在ubuntu-22.04(GitHub托管)上,不共享自托管runner的工作空间,因此不需要此步骤。
- 无测试或配置配套改动:此变更仅涉及CI工作流配置,不涉及源码、测试或部署配置的修改。
关键文件:
.github/workflows/release-docker-dev.yml(模块 CI工作流;类别 infra;类型 infrastructure): 这是nightly Docker镜像构建的主要工作流,直接修复了报告中提到的失败问题。
.github/workflows/release-docker.yml(模块 CI工作流;类别 infra;类型 infrastructure): 处理标签发布的Docker镜像构建,同样使用docker-build-node runner,需要相同的修复。
.github/workflows/release-docker-runtime.yml(模块 CI工作流;类别 infra;类型 infrastructure): 涉及runtime镜像的发布工作流,也使用docker-build-node runner,修复确保一致性。
.github/workflows/trivy-scan-dev.yml(模块 CI工作流;类别 infra;类型 infrastructure): 每日漏洞扫描工作流,使用docker-build-node runner进行镜像扫描,需要清理以避免失败。
.github/workflows/patch-docker-dev.yml(模块 CI工作流;类别 infra;类型 infrastructure): 手动补丁工作流,同样使用docker-build-node runner,添加清理以确保稳定性。
关键符号:未识别
评论区精华
由于review评论为空,没有具体的讨论交锋。PR body中已详细解释了问题根因和解决方案,并提供了测试计划。
风险与影响
- 风险:
- 权限风险:
sudo rm -rf命令具有破坏性,如果路径变量错误或命令被误用,可能删除非预期文件。但此处使用"$GITHUB_WORKSPACE"/*并添加|| true,限制了删除范围并忽略错误,风险可控。
- 兼容性风险:变更仅影响特定标签的CI runner,对源码逻辑、运行时行为或用户API无影响。
- 性能风险:每次运行都执行清理可能增加少量开销,但相对于构建时间可忽略,且避免了因失败导致的重试成本。
- 安全风险:无新增安全漏洞,清理的是临时工作空间文件。
- 影响:
- 对系统影响:修复了CI流水线的稳定性问题,确保Docker镜像构建工作流能可靠运行,减少因权限问题导致的构建失败。
- 对用户影响:最终用户无感知,但开发者能获得更稳定的nightly镜像和发布流程。
- 对团队影响:减少了CI维护负担,避免了因残留文件导致的调试时间。
- 影响范围:仅限于使用自托管docker-build-node runner的CI工作流,不影响其他测试或部署流程。
- 风险标记:权限操作风险, CI稳定性依赖
关联脉络
- PR #23208 [CI] Partition stage-a-test-cpu into 4 matrix shards: 同为CI基础设施优化,涉及工作流配置调整,但解决的是测试超时问题而非权限问题。
- PR #23247 [AMD] Fix multimodal timeout issue : rocm7.2 PR Test: 涉及CI工作流修复(调整分区数),但针对AMD测试而非Docker构建。
- PR #23213 wait for reap in kill_process_tree: 同为bugfix,但解决的是资源竞争条件,而非CI权限问题。
参与讨论