Prhub

#27860 ci(xpu): pull intel/sglang-dev:latest and clean workspace properly

原始 PR 作者 arathi-hlab 合并时间 2026-06-11 13:14 文件变更 2 提交数 4 评论 1 代码增减 +42 / -59

执行摘要

重构 XPU CI 容器镜像拉取策略并修复权限问题

PR body 指出:发布工作流已经将 :latest 标签与 nightly 日期标签一起推送,因此无需再回退扫描历史标签;pip install 以 root 身份在容器内运行,导致挂载的工作空间内文件归 root 所有,主机清理时 rm 因权限不足失败(被 || true 静默忽略)。此外,为了更完整地清理构建产物,需要扩大 rm 范围。

建议合并此 PR。虽然没有功能性的修改,但显著提升了 XPU CI 的健壮性和可维护性。值得关注的设计决策是:直接依赖 :latest 标签权衡了便利性与一致性,团队应确保发布工作流打 :latest 标签的时机合适且明确。

讨论亮点

review 简洁,审核人 mingfeima 直接批准通过,无其他评论讨论。

实现拆解

实现了三项主要变更:

  1. 简化容器镜像拉取 (scripts/ci/xpu/xpu_ci_start_container.sh):用直接 pull intel/sglang-dev:latest 替换原先遍历近 7 天 nightly 标签的复杂逻辑;新增 --image-tag 参数替代 --lookback-days,允许调用方仍然指定特定标签。
  2. 修复工作空间清理权限 (pr-test-xpu.yml 两阶段 cleanup):在 stage-a 和 stage-b 的清理步骤中,先用 docker run busybox chown 将工作空间内的文件所有者变更为 runner 用户,再执行 rm,避免因 root 所有权导致清理失败。
  3. 扩展清理范围并启用 --continue-on-error:新增 python/dist*.egg-infotest/results.pytest_cache__pycache__ 等目录的清理;在 stage-b 的 run_suite.py 调用中添加 --continue-on-error,保证即使某个测试文件失败也能完成全部测试并输出摘要。
    没有涉及源代码或测试的修改,全部为 CI 基础设施脚本和工作流的优化。
文件 模块 状态 重要度
scripts/ci/xpu/xpu_ci_start_container.sh CI 脚本 modified 4.99
.github/workflows/pr-test-xpu.yml CI 工作流 modified 4.22

关键源码片段

scripts/ci/xpu/xpu_ci_start_container.sh infrastructure

核心变更点:重构容器镜像拉取策略,移除复杂的按日期回退逻辑,直接使用 :latest 标签,并替换参数接口。

#!/bin/bash
set -euo pipefail
​
# Start the Intel XPU CI container (ci_sglang_xpu) using the intel/sglang-dev:latest
# image published by .github/workflows/release-docker-intel-xpu-nightly.yml.
# Pulls the :latest tag and starts a long-running container that subsequent
# steps `docker exec` into.CONTAINER_NAME="ci_sglang_xpu"
IMAGE_REPO="intel/sglang-dev"
IMAGE_TAG="latest" # 直接使用 latest 标签,不再回退扫描日期标签
CUSTOM_IMAGE=""while [[ $# -gt 0 ]]; do
    case $1 in
        --custom-image) CUSTOM_IMAGE="$2"; shift 2;;
        --container-name) CONTAINER_NAME="$2"; shift 2;;
        --image-tag) IMAGE_TAG="$2"; shift 2;; # 替代原有 --lookback-days 参数
        -h|--help)
            echo "Usage: $0 [OPTIONS]"
            echo "Options:"
            echo "  --custom-image IMAGE   Use a specific Docker image directly"
            echo "  --container-name NAME  Override container name (default: ${CONTAINER_NAME})"
            echo "  --image-tag TAG        Tag of ${IMAGE_REPO} to pull (default: ${IMAGE_TAG})"
            exit 0 ;;
        *) echo "Unknown option $1"; exit 1;;
    esac
done# ... 后续拉取并启动容器的逻辑基本保持不变 ...

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

本次变更为 CI 基础设施优化,风险较低。主要潜在风险:

  • 环境一致性:直接使用 :latest 标签可能导致不同时间运行 CI 的镜像版本不一致,如果 :latest 更新了不兼容的依赖,可能引入难以追踪的失败。但发布工作流同时保留了日期标签,必要时可通过 --image-tag 锁定特定版本。
  • 清理覆盖完整性:虽然扩展了清理范围,如果未来的构建产出台新增目录或文件类型未在 rm 列表中,仍可能遗留文件影响下次运行。
  • --continue-on-error 影响:虽然有利于全面报告,但可能让运维人员忽略关键失败,需要结合测试结果报告仔细检查。
  • 用户影响:无。变更仅限 CI 基础设施。
  • 系统影响:Intel XPU CI 构建流程更稳定、清理更彻底,减少了因上一轮构建残留导致的随机失败。
  • 团队影响:镜像拉取速度提升(跳过回退扫描),测试结果更完整(continue-on-error),开发人员调试 CI 失败体验改善。
CI 基础设施变更 容器镜像标签简化 工作空间清理权限修复

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论