执行摘要
- 一句话:将非 root smoke 测试从镜像构建步骤中分离
- 推荐动作:建议快速合并。这是一个纯粹的 CI 改进,逻辑清晰,风险极低,能有效提升 CI 可见性和效率。
功能与动机
当 smoke 测试失败时,它们会显示为 600 分钟镜像构建步骤的失败,导致难以快速判断是构建本身失败还是构建后的验证失败。分离它们可以让构建和 smoke 测试失败在 Buildkite UI 中独立可见,并允许单独重试 smoke 测试而无需重新运行完整的镜像构建。
实现拆解
-
创建独立的 smoke 测试步骤:在 .buildkite/image_build/image_build.yaml 中,将原先嵌入 image-build 步骤的 commands 中的两个非 root smoke 测试命令(docker run 调用)提取出来,构成一个新的步骤,label 为 :docker: :smoking: Non-root smoke tests,key 为 image-smoke-test。
-
调整依赖关系:新的 smoke 测试步骤通过 depends_on:
- image-build 依赖于构建步骤。构建步骤本身保留 key: image-build,因此所有下游的约 30 个 depends_on: image-build 引用无需修改。注意第二个提交修复了 depends_on 格式问题,确保其符合 pipeline-generator 的 Pydantic Step 模型要求(必须为列表)。
-
添加自动重试配置:为构建步骤添加了 retry 配置,当 exit_status 为 -1 或 -10(agent 丢失)时自动重试最多 2 次,提高构建步骤的鲁棒性。
关键文件:
.buildkite/image_build/image_build.yaml(模块 CI 配置;类别 config;类型 configuration): 唯一变更文件,将 non-root smoke 测试从构建步骤中分离,并添加自动重试。
关键符号:未识别
评论区精华
在 Issue 评论中,Harry-Chen 指出 smoke 测试本身失败(deno 构建的 pipeline 中报 docker: not found),TheDuyIT 发现是由于 job 运行在没有 docker 的节点上,建议添加 no_plugin: true 或确保使用 docker 标签。PR 作者 khluu 确认问题并修复。
风险与影响
- 风险:风险较低:仅修改了 CI 配置,不涉及任何源码或运行时逻辑。主要风险是新步骤能否正确获取
$IMAGE_TAG 环境变量,以及下游步骤是否仍能正确依赖于 image-build。PR 作者已确认依赖关系保持不变。
- 影响:对用户和系统无影响。对 CI 流程有正面影响:提高了构建和 smoke 测试失败的可诊断性,支持单独重试 smoke 测试,减少了排查和重试的时间成本。
- 风险标记:环境变量传递风险, 依赖关系验证
关联脉络
参与讨论