Prhub

#43901 Refactor output filename handling in ci-fetch-log.sh

原始 PR 作者 mgoin 合并时间 2026-05-29 05:20 文件变更 1 提交数 1 评论 0 代码增减 +21 / -2

执行摘要

重构 CI 日志获取脚本输出文件名逻辑

CI 日志获取脚本在并行拉取同一个 build 下多个 job 的日志时,原先默认文件名仅使用 UUID 前 8 个字符,而同一 build 内 job UUID 的前 8 个字符可能相同,导致文件名冲突并被互相覆盖。PR body 明确指出:'Updated output filename logic to ensure uniqueness when fetching logs for multiple jobs in parallel.'

该 PR 为维护性小改进,逻辑简单清晰,无需深入精读。CI 相关开发者可了解变化,确保下游脚本适配新行为(特别是文件名变更和覆盖保护)。

讨论亮点

无 review 评论。

实现拆解

  1. 注释说明:在脚本开头的注释块中添加了使用说明,解释默认输出路径格式 ci-<build>-<uuid_first_13_chars>.log,并说明为什么需要第二个片段保证唯一性。
  2. 变量默认值后移:将原直接赋值的 OUT 变量改为先置空,后续统一构造默认文件名,使逻辑分支更清晰。
  3. 文件名构造增加字符数:默认文件名中的 UUID 片段从 {JOB:0:8}(前 8 字符)改为 {JOB:0:13}(前 13 字符),确保同一 build 内不同 job 的默认文件名唯一。
  4. 新增覆盖保护:检查 $OUT 指向的文件是否已存在,若存在且环境变量 CI_FETCH_LOG_FORCE 未设置,则退出并报错,提示用户指定显式路径或设置环境变量强制覆盖。
文件 模块 状态 重要度
.buildkite/scripts/ci-fetch-log.sh CI 脚本 modified 3.6

关键源码片段

.buildkite/scripts/ci-fetch-log.sh core-logic

唯一变更文件,重构输出文件名处理和覆盖保护。

# Default output path: ci-<build>-<uuid_first_13_chars>.log (e.g.
# ci-68478-019e6b07-daae.log). Jobs in the same build share the UUID's
# first 8 chars, so the second segment is needed for uniqueness when
# fetching multiple jobs in parallel. The script refuses to overwrite an
# existing output file; pass an explicit path or set CI_FETCH_LOG_FORCE=1
# to override.
​
... # 原逻辑:OUT="${2:-ci-${BUILD}-${JOB:0:8}.log}"
# 改为先置空,后续统一处理
OUT="${2:-}"if [ -z "$OUT" ]; then
  # 使用前 13 个字符确保唯一性
  OUT="ci-${BUILD}-${JOB:0:13}.log"
fi# 若文件已存在且无强制覆盖标志,则拒绝覆盖并提示
if [ -e "$OUT" ] && [ -z "${CI_FETCH_LOG_FORCE:-}" ]; then
  echo "Refusing to overwrite existing $OUT (set CI_FETCH_LOG_FORCE=1 or pass an explicit output path)." >&2
  exit 1
fi

评论区精华

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

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

风险与影响

风险极低。变更仅影响 CI 内部脚本的日志获取流程,不涉及任何推理、模型或核心业务逻辑。可能的风险包括:

  • 用户依赖旧默认文件名时可能找不到文件(可通过显式指定路径解决)。
  • 新增的覆盖保护可能使未设置 CI_FETCH_LOG_FORCE 的脚本在重跑时失败,但这是预期行为,且报错信息清晰。

影响范围仅限于使用 ci-fetch-log.sh 的 CI 作业。对正常 CI 流程无负面影响;对并行获取多个 job 日志的场景,可避免数据覆盖,提升可靠性。属于正向改进。

文件名变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论