You need to enable JavaScript to run this app. 使用Bazel将Go e2e测试二进制加入Docker镜像的testonly依赖报错解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Bazel将Go e2e测试二进制加入Docker镜像的testonly依赖报错解决

报错根因

Bazel内置依赖校验逻辑要求:标记为testonly=True的构建目标,仅能被同样开启testonly=True的目标依赖。
你引用的:e2e_test是通过go_test规则定义的,该规则默认自带testonly=True属性,而你编写的container_image规则未开启该属性,因此触发了非测试目标依赖测试专属目标的校验拦截。

修复操作

为container_image规则补充testonly=True属性即可解决报错,修改后的规则配置为:

container_image(
    name = "image",
    base = "@alpine_linux_amd64//image",
    entrypoint = ["/e2e_test"],
    files = [":e2e_test"],
    testonly = True,
)

注意事项

  • 该镜像的定位就是承载端到端测试任务,开启testonly=True完全匹配其制品属性,不会拦截你直接执行bazel build //testing/e2e:image导出镜像、分发到测试环境的操作。
  • 只要构建的e2e_test是CGO_ENABLED=0编译的静态可执行文件,当前基于alpine的基础镜像就可以直接运行,无需额外增加系统依赖层。
  • 如果后续调整二进制在镜像内的存放路径,需要同步修改entrypoint中的对应启动路径,保证命令能定位到可执行文件。
  • 若后续有非测试类目标需要依赖该测试二进制,可以单独将核心测试逻辑抽成非testonly属性的go_binary目标,让go_test和container_image都指向该二进制,无需改动现有测试执行逻辑。

内容的提问来源于stack exchange,提问作者wwaldner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 16:06:00