我正在尝试使用以下代码构建 Docker 镜像:
container_image(
name = "docker_image",
base = "@java_base//image",
files = [":executable_deploy.jar"],
cmd = ["java", "-jar", "executable_deploy.jar"],
env = { "VERSION" : "$(VERSION)" }
)
我想将一个变量传递给构建的目标,以便可以在 $(VERSION) 中替换它。这可能吗?
我试过
VERSION=1.0.0 bazel build :docker_image
,但我收到一个错误:$(VERSION) not defined.
我怎样才能传递那个变量?
According docs :
The values of this field (env) support make variables (e.g., $(FOO)) and stamp variables; keys support make variables as well. But I don't understand exactly what that means.
最佳答案
这些变量可以通过 --define
设置旗帜。
在 rules_docker 页面上有一个关于 stamping 的部分这涵盖了这一点。
本质上,您可以执行以下操作:bazel build --define=VERSION=1.0.0 //:docker_image
也可以从 stable-status.txt
获取这些键/值对。和 volatile-status.txt
文件。 user manual bazel 的页面展示了如何使用这些文件,以及 --workspace_status_command
的使用填充它们。
要设置默认值,您可以使用 .bazelrc
文件,内容如下:
build --define=VERSION=0.0.0-PLACEHOLDER
在命令行上传递的标志将优先于 .bazelrc 文件中的标志。
值得一提的是,变化
define
值将导致 bazel 再次分析所有内容,这取决于图表可能需要一些时间,但只会执行受影响的操作。
关于environment-variables - 如何将变量传递给 Bazel 目标构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61045101/