问题
在受限网络环境(github.com:443 间歇性断流、响应被截断)下实测验证链路存在三类可靠性问题:
1. GitHub API 客户端没有瞬时错误重试
GitHubClient._request 使用 urllib.request.urlopen 单次请求:api.github.com 大响应(约 750KB,如 open pull requests 列表)间歇性被截断,抛 http.client.IncompleteRead,导致 gate/adopt 在竞争工作检测处随机失败,重跑一次又成功。GET 请求幂等,应支持有限次数退避重试;POST/PATCH 非幂等,保持不重试。
2. Runner 镜像缺少 JDK 17,且构建下载易失败
- 目标仓库需要 Java 17(例如 Spring Boot 3 项目),当前镜像只有 Temurin 8,verify 无法运行
- Dockerfile 构建依赖 github.com 大文件下载(Temurin 100MB+),无重试,受限网络下 exit 18 中断整层构建
- 修复方向:apt 安装 openjdk-17-jdk-headless 并符号链接为 /opt/java/temurin-17(保留 8 为默认);Maven 发行版改用 TUNA 镜像(SHA512 校验不变);所有 curl 加 --retry
3. 容器内 JVM user.home 解析为 "?",Maven 缓存丢失
容器以 host uid 运行且镜像内无对应 passwd 条目时,JDK 的 user.home 解析为字面量 "?",Maven 本地仓库落到工作区下 ?/.m2,随沙箱销毁;bootstrap 联网下载的全部依赖在断网 verify 阶段全部失效。修复方向:verifier 在容器环境注入 JAVA_TOOL_OPTIONS=-Duser.home=/reposteward-env/home(持久卷),并补充测试。
验收标准
uv run python -m unittest discover -s tests 全绿(含新增重试与 env 注入测试)
uvx ruff check . 与 uvx ruff format --check . 通过
- 使用新镜像对 DataAgent 仓库完成一次 adopt 全流程(bootstrap 联网 + 断网 verify 通过)作为证据
问题
在受限网络环境(github.com:443 间歇性断流、响应被截断)下实测验证链路存在三类可靠性问题:
1. GitHub API 客户端没有瞬时错误重试
GitHubClient._request使用urllib.request.urlopen单次请求:api.github.com 大响应(约 750KB,如 open pull requests 列表)间歇性被截断,抛http.client.IncompleteRead,导致gate/adopt在竞争工作检测处随机失败,重跑一次又成功。GET 请求幂等,应支持有限次数退避重试;POST/PATCH 非幂等,保持不重试。2. Runner 镜像缺少 JDK 17,且构建下载易失败
3. 容器内 JVM user.home 解析为 "?",Maven 缓存丢失
容器以 host uid 运行且镜像内无对应 passwd 条目时,JDK 的 user.home 解析为字面量 "?",Maven 本地仓库落到工作区下
?/.m2,随沙箱销毁;bootstrap 联网下载的全部依赖在断网 verify 阶段全部失效。修复方向:verifier 在容器环境注入JAVA_TOOL_OPTIONS=-Duser.home=/reposteward-env/home(持久卷),并补充测试。验收标准
uv run python -m unittest discover -s tests全绿(含新增重试与 env 注入测试)uvx ruff check .与uvx ruff format --check .通过