在单独的机器上运行bazel远程执行器testing

bazel( 这里 )的远程工作人员指南解释了如何在本地启动远程工作人员,然后运行bazel。

我试了一下,确实有效( GH中报告的错误)

另一个尝试是创build一个虚拟的独立的机器上运行远程工作者,通过运行它在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"] 

在构build它之后,我只需将绑定端口的docker运行到localhost:

 $ docker build -t bazel-worker . $ docker run -p 3030:3030 bazel-worker 

然后运行bazel javatesting运行使用远程工作者:(可以看看我的testing回购在这里 )

 $ 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的,我在本地运行bazel开发版(sha 956810b6ee24289e457a4b8d0a84ff56eb32c264 )。

在与Bazel本身不同的体系结构/操作系统组合上运行远程工作程序尚未运行。 我们在巴泽尔还有几个地方检查本地机器 – 他们是作为临时措施join的,但还没有确定。

编辑:它可能在某些情况下工作,特别是对平台无关的代码(例如Java或Scala)。

如果你的构buildtesting繁重,你可以尝试远程运行testing–test_strategy = remote; 不过,我不确定默认的Jvmconfiguration是否可以工作。

如果你想远程运行整个构build,那么你需要告诉Bazel它正在执行什么样的机器/操作系统。 现在,这需要设置–host_cpu,可能–crosstool_top / –host_crosstool_top为该平台configurationC ++编译器。

而且,一些平台的组合更多,更不太可能工作。 特别是,将MacOS和Linux或不同types的Linux结合起来比Windows更有可能工作。

Interesting Posts