为了账号安全,请及时绑定邮箱和手机立即绑定

Bazel:如何获取我沿着 bazel 测试构建的二进制文件的路径

Bazel:如何获取我沿着 bazel 测试构建的二进制文件的路径

Go
慕森王 2022-11-08 16:00:44
我正在用 bazel 编写一个 go 测试。测试将首先构建一个二进制文件,并将二进制文件挂载到一个 docker 容器。所以我需要知道我构建的二进制文件的路径。文件系统结构如下:dir 结构如下所示:    some/of/my/path    ├── BUILD.bazel    ├── my_test.go    └── my_tool        ├── BUILD.bazel        └── my_tool.go我想在my_tooldir 中使用 go 文件构建一个 go 二进制文件。从我上一个问题的回答中,我知道我可以使用in from 的data条目来构建二进制文件:go_testsome/of/my/path/BUILD.bazelgo_test(    name = "my_test",    srcs = ["my_test.go"],    data = glob(["testdata/**"]) + [        "//some/of/my/path/my_tool:my_tool",    ],    gotags = ["my_test"],    deps = [        "//pkg/util/contextutil",        "//pkg/util/log",    ...    ],)它确实为my_tool. 但现在的问题是,我怎么知道in的内置二进制文件在哪里?my_toolmy_test.go在my_test.go,我需要写这样的东西:package my_lucky_test...pathForMyTool := some_pathhostConfig := container.HostConfig{Binds := []string {""%s/my_tool-bin:/workding-dir/my_tool-bin", pathForMyTool"}}我的问题是如何获得“my_tool-bin”的绝对路径?
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

只需运行;


bazel build //some/of/my/path:my_test

它应该将二进制文件的路径打印到标准输出。


作为您当前方法的替代方案,我可能建议您使用bazelbuild/rules_docker#go_image这是一种用于构建容器的 Bazel 感知方法。


编辑:OP 已经澄清了这个问题,尽管我留下了上面的原始答案,因为其他人可能会觉得它很有用。


当您将二进制/测试与一些数据捆绑在一起时,数据属性下的文件将成为一组“运行文件”。每种语言都有各种用于解析运行文件的库。对于 golang,您需要使用 rules_go 中的bazel pkg来解析您的运行文件。例如


go_test(

    name = "my_test",

    srcs = ["my_test.go"],

    data = glob(["testdata/**"]) + [

        "//some/of/my/path/my_tool:my_tool",

    ],

    gotags = ["my_test"],

    deps = [

        "//pkg/util/contextutil",

        "//pkg/util/log",

        # NEW dep

        "@rules_go//rules_go/go/tools/bazel",

    ...

    ],

)

你的my_test.go;


package my_lucky_test


# NEW

import(

    "github.com/bazelbuild/rules_go/go/tools/bazel"

)


#...


pathForMyTool, ok := bazel.FindBinary("some/of/my/path/my_tool", "my_tool")

if !ok {

    # Error handling

}

hostConfig := container.HostConfig{

    Binds := []string {""%s/my_tool-bin:/workding-dir/my_tool-bin", pathForMyTool}

}


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信