首页 > 解决方案 > 读取 WORKSPACE 中的文件内容

问题描述

container_pull在我的 WORKSPACE 文件中使用。(它是bazel docker 规则的一部分)
如下所示:

container_pull(
    name = "base-image",
    registry = "registry:9999",
    repository = "base-image",
    digest = "sha256:e6f44554a270025c578c0f91160d809735c2589baae80bafcdeebefb0c0b04b6",
    tag = "1.1.0"
)

但是,有一个包含 版本的文件base-image,我希望从该文件中读取它,而不是在 WORKSPACE 中进行硬编码。
如何在 WORKSPACE 中读取文件内容?

标签: bazelstarlark

解决方案


没有直接的方法可以从工作区文件中读取文件。该container_pull规则必须添加对从文件读取的支持。

一种解决方法是将包含信息的文件放入.bzl格式中,然后从工作区文件中加载该文件。

像这样的东西:

versions.bzl

BASE_IMAGE_VERSION = "1.1.0"

WORKSPACE

load("//:versions.bzl", "BASE_IMAGE_VERSION")

container_pull(
    name = "base-image",
    registry = "registry:9999",
    repository = "base-image",
    digest = "sha256:e6f44554a270025c578c0f91160d809735c2589baae80bafcdeebefb0c0b04b6",
    tag = BASE_IMAGE_VERSION,
)

Bazel 在自己的工作区文件中做了类似的事情: https ://github.com/bazelbuild/bazel/blob/669a1a2634bdf267f890cf88833c9712d4e75016/WORKSPACE#L589


推荐阅读