如何使用 bazel 拉取基于架构的图像
how to pull image based on architecture with bazel
我是 运行 bazel,正在使用 rules_docker 的规则 container_pull。
container_pull 具有体系结构属性。
在 CI 和一些开发机器中,架构是 amd。
在新的 m1 macs 中,架构是 arm。
我如何配置 bazel 在 amd 机器上拉 amd,在 arm 机器上拉 arm?
最简单的方法是使用两个 container_pull 规则和 select。在你的 WORKSPACE
:
container_pull(
name = "thing_amd",
architecture = "amd64",
<same stuff you have now>
)
container_pull(
name = "thing_arm",
architecture = "arm",
<same stuff you have now>
)
然后在某些 BUILD
文件中:
config_setting(
name = "k8",
constraint_values = ["@platforms//cpu:x86_64"],
)
config_setting(
name = "arm",
constraint_values = ["@platforms//cpu:arm"],
)
alias(
name = "thing",
actual = select({
":k8": "@thing_amd//image",
":arm": "@thing_arm//image",
}),
)
如果您想删除重复数据(尤其是当您有两个以上的 CPU 时),macros 很有帮助。创建一个包含所有 CPU 的 .bzl
文件,然后创建一个宏来创建所有 container_pull
存储库(从 WORKSPACE
加载+调用)和另一个宏来创建 config_setting
s 和您从 BUILD
文件加载+调用的 alias
。
我是 运行 bazel,正在使用 rules_docker 的规则 container_pull。 container_pull 具有体系结构属性。 在 CI 和一些开发机器中,架构是 amd。 在新的 m1 macs 中,架构是 arm。
我如何配置 bazel 在 amd 机器上拉 amd,在 arm 机器上拉 arm?
最简单的方法是使用两个 container_pull 规则和 select。在你的 WORKSPACE
:
container_pull(
name = "thing_amd",
architecture = "amd64",
<same stuff you have now>
)
container_pull(
name = "thing_arm",
architecture = "arm",
<same stuff you have now>
)
然后在某些 BUILD
文件中:
config_setting(
name = "k8",
constraint_values = ["@platforms//cpu:x86_64"],
)
config_setting(
name = "arm",
constraint_values = ["@platforms//cpu:arm"],
)
alias(
name = "thing",
actual = select({
":k8": "@thing_amd//image",
":arm": "@thing_arm//image",
}),
)
如果您想删除重复数据(尤其是当您有两个以上的 CPU 时),macros 很有帮助。创建一个包含所有 CPU 的 .bzl
文件,然后创建一个宏来创建所有 container_pull
存储库(从 WORKSPACE
加载+调用)和另一个宏来创建 config_setting
s 和您从 BUILD
文件加载+调用的 alias
。