java - 以生产就绪方式执行 bazel-buildfarm,无需“bazel run”
问题描述
Bazel-buildfarm的自述文件说:
In general do not execute server binaries with bazel run, since bazel does not support running multiple targets.
这听起来像是bazel run
为本地测试目的而设计的,而不是为可以运行多个作业的生产服务器而设计的。但是我找不到显示如何运行 bazel 服务器的文档。较旧的 Dockerfile运行 bazel build,然后使用 java 执行生成的 jar 文件。我在我的测试机器上试过这个并得到以下错误:
[vagrant@localhost bazel-buildfarm]$ java -Djava.util.logging.config.file=/config/logging.properties -jar bazel-bin/src/main/java/build/buildfarm/buildfarm-server.jar
no main manifest attribute, in bazel-bin/src/main/java/build/buildfarm/buildfarm-server.jar
之前的构建似乎工作:
[vagrant@localhost bazel-buildfarm]$ bazel build //src/main/java/build/buildfarm:buildfarm-server
Starting local Bazel server and connecting to it...
[...]
INFO: Analyzed target //src/main/java/build/buildfarm:buildfarm-server (94 packages loaded, 1623 targets configured).
INFO: Found 1 target...
INFO: Deleting stale sandbox base /home/vagrant/.cache/bazel/_bazel_vagrant/277990f61896f4bac21fb997fb976b70/sandbox
Target //src/main/java/build/buildfarm:buildfarm-server up-to-date:
bazel-bin/src/main/java/build/buildfarm/buildfarm-server.jar
bazel-bin/src/main/java/build/buildfarm/buildfarm-server
INFO: Elapsed time: 11.180s, Critical Path: 0.61s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
并且jar文件存在:
[vagrant@localhost bazel-buildfarm]$ l bazel-bin/src/main/java/build/buildfarm/buildfarm-server
-r-xr-xr-x. 1 vagrant vagrant 17K Nov 11 11:27 bazel-bin/src/main/java/build/buildfarm/buildfarm-server
我刚刚使用具有所有依赖项(gcc gcc-c++)的 CentOS 存储库安装了 bazel,并克隆了 bazel-buildfarm 的 git 存储库。和
bazel run //src/main/java/build/buildfarm:buildfarm-server $(pwd)/examples/server.config.example
服务器至少可以成功启动:
INFO: Analyzed target //src/main/java/build/buildfarm:buildfarm-server (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src/main/java/build/buildfarm:buildfarm-server up-to-date:
bazel-bin/src/main/java/build/buildfarm/buildfarm-server.jar
bazel-bin/src/main/java/build/buildfarm/buildfarm-server
INFO: Elapsed time: 0.325s, Critical Path: 0.00s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
INFO: Build completed successfully, 1 total action
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Nov 12, 2019 3:08:13 PM build.buildfarm.server.BuildFarmServer <init>
INFO: buildfarm-server-c6735a2a-2c1b-473e-9d3e-14fe5d01c27d initialized
我究竟做错了什么?还是有另一种方法可以以生产就绪的方式运行 bazel?
平台:CentOS 7.7.1908 和 Vagrant 上的 Bazel 1.1.0
解决方案
虽然我不知道任何关于 buildfarm 的具体信息,但您可能--
在使用 Bazel 运行的目标及其参数之间缺少双破折号 ( )。你的命令行应该是这样的:
bazel run //src/main/java/build/buildfarm:buildfarm-server -- $(pwd)/examples/server.config.example
推荐阅读
- c++ - 编译时二进制搜索树错误的反向迭代器显示“没有匹配的函数调用运算符 =()”
- java - java中如何逐行上传文件到谷歌云存储(PipedInputStream的实现)
- python - 仅合并 Python Pandas 索引或将 multiIndex Cartesian 与 multiIndex 聚合组合以显示正在使用与未使用
- regex - Excel VBA嵌套正则表达式替换
- java - 字符串模棱两可的构造函数(byte[] vs char[])
- javascript - TypeError:无法在 game.js:51 读取 null 的属性“addEventListener”
- terraform - Terraform 多个 for_each 资源
- java - 除了 getString(R.string.idString) 之外,有没有一种方法可以用 Java 语言获取 Android 字符串资源的值?
- terraform-provider-aws - terraform 启动 ec2 实例
- python - Python3中列表的自然排序