运行 bazel 远程执行器在不同机器上的测试
running bazel remote executor test on separate machines
bazel 的远程工作者指南 (here) 解释了如何在本地启动远程工作者,然后 运行 bazel 反对它。
我试过了,确实有效(有 reported in GH 的错误)
另一种尝试是在单独的虚拟机上创建 运行 远程工作者,方法是 运行 将其置于 docker 容器中并 运行 对其进行 bazel。但它以不同的方式失败了——我想这次我用错了。
这是我的 docker 文件:
FROM openjdk:8
# install release bazel from apt
RUN echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list
RUN curl https://bazel.build/bazel-release.pub.gpg | apt-key add -
RUN apt-get update && apt-get install -y zip bazel
# compile dev bazel from sources
RUN mkdir -p /usr/src/bazel
# "bazel" has the latest development code of bazel from github
COPY bazel /usr/src/bazel
WORKDIR /usr/src/bazel
RUN bazel build src/bazel
# compile remote_worker using latest development bazel
RUN bazel-bin/src/bazel build //src/tools/remote_worker
# prepare cache folder
RUN mkdir -p /tmp/test
# Run remote-worker
CMD ["bazel-bin/src/tools/remote_worker/remote_worker","--work_path=/tmp/test","--listen_port=3030"]
构建后我简单地 运行 docker 将端口绑定到本地主机:
$ docker build -t bazel-worker .
$ docker run -p 3030:3030 bazel-worker
然后 运行 bazel java 使用远程工作者测试 运行:
(可以查看我的测试仓库here)
$ bazel --host_jvm_args=-Dbazel.DigestFunction=SHA1 test \
--spawn_strategy=remote \
--remote_executor=localhost:3030 \
--remote_cache=localhost:3030 \
--strategy=Javac=remote \
--remote_local_fallback=false \
--remote_timeout=600 \
//src/main/java/com/example/...
但是我收到了这个奇怪的错误消息:
____Loading package: src/main/java/com/example
____Loading package: @bazel_tools//tools/cpp
____Loading package: @local_jdk//
____Loading package: @local_config_xcode//
____Loading package: @local_config_cc//
____Loading complete. Analyzing...
____Loading package: tools/defaults
____Loading package: @bazel_tools//third_party/java/jdk/langtools
____Loading package: @junit//jar
____Found 1 test target...
____Building...
____[0 / 2] BazelWorkspaceStatusAction stable-status.txt
____[2 / 4] Creating source manifest for //src/main/java/com/example:my_test
____From Extracting interface @junit//jar:jar:
/tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: 1: /tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: �����0��!H__PAGEZEROx__TEXTpp__text__TEXT/��__stubs__TEXT0p�__stub_helper__TEXT���__gcc_except_tab__TEXT�: not found
/tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: 2: /tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: Syntax error: word unexpected (expecting ")")
ERROR: /private/var/tmp/_bazel_ors/719f891d5db9fd5e73ade25b0c847fd1/external/junit/jar/BUILD.bazel:2:1: output 'external/junit/jar/_ijar/jar/external/junit/jar/junit-4.12-ijar.jar' was not created.
ERROR: /private/var/tmp/_bazel_ors/719f891d5db9fd5e73ade25b0c847fd1/external/junit/jar/BUILD.bazel:2:1: not all outputs were created or valid.
____Building complete.
Target //src/main/java/com/example:my_test failed to build
Use --verbose_failures to see the command lines of failed build steps.
____Elapsed time: 13.614s, Critical Path: 0.21s
我做错了什么吗?当 运行 在实际(或虚拟)远程机器上启用远程工作人员时(与仅 运行 在本地启用它)时,我是否需要 运行 不同?
重要提示:我的机器是mac osx sierra
。 , 我相信 docker openjdk:8
是基于 ubuntu 的,我是 运行ning 本地 bazel 开发版本 (sha 956810b6ee24289e457a4b8d0a84ff56eb32c264
).
运行 与 Bazel 本身不同的体系结构/OS 组合上的远程工作者尚未工作。我们在 Bazel 中还有几个地方可以检查本地机器——它们是作为临时措施添加的,但尚未修复。
编辑:它在某些情况下可能有效,尤其是对于平台无关的代码(例如,Java 或 Scala)。
如果您的构建需要大量测试,您可以使用 --test_strategy=remote 仅尝试 运行ning 远程测试;不过,我不确定默认的 Jvm 配置是否有效。
如果你想 运行 远程整个构建,那么你需要告诉 Bazel 它在什么样的机器上执行/OS。现在,这需要设置 --host_cpu,并且可能需要 --crosstool_top / --host_crosstool_top 来为该平台配置 C++ 编译器。
此外,平台的某些组合更可能起作用,而某些则不太可能起作用。特别是,组合 MacOS 和 Linux 或不同风格的 Linux 比任何组合的 Windows 更有可能起作用。
bazel 的远程工作者指南 (here) 解释了如何在本地启动远程工作者,然后 运行 bazel 反对它。
我试过了,确实有效(有 reported in GH 的错误)
另一种尝试是在单独的虚拟机上创建 运行 远程工作者,方法是 运行 将其置于 docker 容器中并 运行 对其进行 bazel。但它以不同的方式失败了——我想这次我用错了。
这是我的 docker 文件:
FROM openjdk:8
# install release bazel from apt
RUN echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list
RUN curl https://bazel.build/bazel-release.pub.gpg | apt-key add -
RUN apt-get update && apt-get install -y zip bazel
# compile dev bazel from sources
RUN mkdir -p /usr/src/bazel
# "bazel" has the latest development code of bazel from github
COPY bazel /usr/src/bazel
WORKDIR /usr/src/bazel
RUN bazel build src/bazel
# compile remote_worker using latest development bazel
RUN bazel-bin/src/bazel build //src/tools/remote_worker
# prepare cache folder
RUN mkdir -p /tmp/test
# Run remote-worker
CMD ["bazel-bin/src/tools/remote_worker/remote_worker","--work_path=/tmp/test","--listen_port=3030"]
构建后我简单地 运行 docker 将端口绑定到本地主机:
$ docker build -t bazel-worker .
$ docker run -p 3030:3030 bazel-worker
然后 运行 bazel java 使用远程工作者测试 运行: (可以查看我的测试仓库here)
$ bazel --host_jvm_args=-Dbazel.DigestFunction=SHA1 test \
--spawn_strategy=remote \
--remote_executor=localhost:3030 \
--remote_cache=localhost:3030 \
--strategy=Javac=remote \
--remote_local_fallback=false \
--remote_timeout=600 \
//src/main/java/com/example/...
但是我收到了这个奇怪的错误消息:
____Loading package: src/main/java/com/example
____Loading package: @bazel_tools//tools/cpp
____Loading package: @local_jdk//
____Loading package: @local_config_xcode//
____Loading package: @local_config_cc//
____Loading complete. Analyzing...
____Loading package: tools/defaults
____Loading package: @bazel_tools//third_party/java/jdk/langtools
____Loading package: @junit//jar
____Found 1 test target...
____Building...
____[0 / 2] BazelWorkspaceStatusAction stable-status.txt
____[2 / 4] Creating source manifest for //src/main/java/com/example:my_test
____From Extracting interface @junit//jar:jar:
/tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: 1: /tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: �����0��!H__PAGEZEROx__TEXTpp__text__TEXT/��__stubs__TEXT0p�__stub_helper__TEXT���__gcc_except_tab__TEXT�: not found
/tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: 2: /tmp/test/build-80057300-ffd2-49ea-a20b-3f234d9963db/external/bazel_tools/tools/jdk/ijar/ijar: Syntax error: word unexpected (expecting ")")
ERROR: /private/var/tmp/_bazel_ors/719f891d5db9fd5e73ade25b0c847fd1/external/junit/jar/BUILD.bazel:2:1: output 'external/junit/jar/_ijar/jar/external/junit/jar/junit-4.12-ijar.jar' was not created.
ERROR: /private/var/tmp/_bazel_ors/719f891d5db9fd5e73ade25b0c847fd1/external/junit/jar/BUILD.bazel:2:1: not all outputs were created or valid.
____Building complete.
Target //src/main/java/com/example:my_test failed to build
Use --verbose_failures to see the command lines of failed build steps.
____Elapsed time: 13.614s, Critical Path: 0.21s
我做错了什么吗?当 运行 在实际(或虚拟)远程机器上启用远程工作人员时(与仅 运行 在本地启用它)时,我是否需要 运行 不同?
重要提示:我的机器是mac osx sierra
。 , 我相信 docker openjdk:8
是基于 ubuntu 的,我是 运行ning 本地 bazel 开发版本 (sha 956810b6ee24289e457a4b8d0a84ff56eb32c264
).
运行 与 Bazel 本身不同的体系结构/OS 组合上的远程工作者尚未工作。我们在 Bazel 中还有几个地方可以检查本地机器——它们是作为临时措施添加的,但尚未修复。
编辑:它在某些情况下可能有效,尤其是对于平台无关的代码(例如,Java 或 Scala)。
如果您的构建需要大量测试,您可以使用 --test_strategy=remote 仅尝试 运行ning 远程测试;不过,我不确定默认的 Jvm 配置是否有效。
如果你想 运行 远程整个构建,那么你需要告诉 Bazel 它在什么样的机器上执行/OS。现在,这需要设置 --host_cpu,并且可能需要 --crosstool_top / --host_crosstool_top 来为该平台配置 C++ 编译器。
此外,平台的某些组合更可能起作用,而某些则不太可能起作用。特别是,组合 MacOS 和 Linux 或不同风格的 Linux 比任何组合的 Windows 更有可能起作用。