Bazel 一次构建多个目标
Bazel Build Multiple Targets at Once
我想要一个能够同时构建多个目标的 Bazel 规则。所以基本上是这样的:
build_all(
name = "build_all",
targets = [
"//services/service1:build",
"//services/service2:build",
"//services/service3:build",
]
)
所以我会 运行
bazel build //:build_all
用一个简单的命令构建我所有的服务(测试也是如此)。但是我找不到任何当前的解决方案。
有办法实现吗?
filegroup
似乎是一个现成的规则,可以被滥用于以下目的:
filegroup(
name = "build_all",
srcs = [
"//services/service1:build",
"//services/service2:build",
"//services/service3:build",
]
)
否则它允许您为一堆文件(标签)指定一个集合名称以便于传递,但似乎与在命令行上使用的摘要目标一样有效。
因为我试图部署多个 Kubernetes 配置,所以我最终使用了 Multi-Object Actions for rules_k8s,它看起来像:
load("@io_bazel_rules_k8s//k8s:objects.bzl", "k8s_objects")
k8s_objects(
name = "deployments",
objects = [
"//services/service1:build",
"//services/service2:build",
"//services/service3:build",
]
)
如果您只想要构建目标的一个子集,其他答案可能更好,但您也可以尝试 bazel build :all
和 bazel test :all
您还可以使用 --build_tag_filters
有选择地构建具有给定标签的多个目标。
编辑:
--build_tag_filters
正在使用 OR 逻辑。如果你想构建满足多个标签的目标,我建议你先查询它,然后再构建结果目标。
例如
QUERY="attr(tags, 'tag1', attr(tags, 'tag2', ...))"
BUILD_TARGETS=$(bazel query "$QUERY")
bazel build "$BUILD_TARGETS"
我想要一个能够同时构建多个目标的 Bazel 规则。所以基本上是这样的:
build_all(
name = "build_all",
targets = [
"//services/service1:build",
"//services/service2:build",
"//services/service3:build",
]
)
所以我会 运行
bazel build //:build_all
用一个简单的命令构建我所有的服务(测试也是如此)。但是我找不到任何当前的解决方案。
有办法实现吗?
filegroup
似乎是一个现成的规则,可以被滥用于以下目的:
filegroup(
name = "build_all",
srcs = [
"//services/service1:build",
"//services/service2:build",
"//services/service3:build",
]
)
否则它允许您为一堆文件(标签)指定一个集合名称以便于传递,但似乎与在命令行上使用的摘要目标一样有效。
因为我试图部署多个 Kubernetes 配置,所以我最终使用了 Multi-Object Actions for rules_k8s,它看起来像:
load("@io_bazel_rules_k8s//k8s:objects.bzl", "k8s_objects")
k8s_objects(
name = "deployments",
objects = [
"//services/service1:build",
"//services/service2:build",
"//services/service3:build",
]
)
如果您只想要构建目标的一个子集,其他答案可能更好,但您也可以尝试 bazel build :all
和 bazel test :all
您还可以使用 --build_tag_filters
有选择地构建具有给定标签的多个目标。
编辑:
--build_tag_filters
正在使用 OR 逻辑。如果你想构建满足多个标签的目标,我建议你先查询它,然后再构建结果目标。
例如
QUERY="attr(tags, 'tag1', attr(tags, 'tag2', ...))"
BUILD_TARGETS=$(bazel query "$QUERY")
bazel build "$BUILD_TARGETS"