environment-variables - 如何将变量传递给 Bazel 目标构建?

标签 environment-variables bazel

我正在尝试使用以下代码构建 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/

相关文章:

maven - 从 Azure 管道 maven 构建的单元测试访问安全变量

angular - 类型 { production : boolean; } 上不存在属性 'firebase'

python - 如何使用当前 conda 环境的 python 路径作为脚本的 shebang?

rust - 在 Bazel 中编译 Rocket

android - 如何将 Android 的导航架构组件与 Bazel 一起使用?

elasticsearch - Logstash 中的环境变量未被正确解析

macos - Apple_Ubiquity_Message 到底是什么?

c++ - 如何使用 Bazel 获得 C++ 代码覆盖率?

lapack - BLAS 和 LAPACK 的 Bazel 构建规则

c++ - 使用自定义 Clang + Libc++(而不是 stdlibc++)编译 Tensorflow