2017-06-04 51 views
3

bazel的远程工作人员指南(here)解释了如何在本地启动远程工作人员,然后对其运行bazel。在单独的机器上运行bazel远程执行程序测试

我试了一下,确实是工作(与臭虫reported in GH

的另一种尝试是通过运行其泊坞窗容器内和运行巴泽勒反对创建运行一个虚拟单独的机器上远程工作者。但它以不同的方式失败 - 我想这次我错误地使用了它。

这是我的搬运工文件:

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 build -t bazel-worker . 
$ docker run -p 3030:3030 bazel-worker 

然后跑巴泽勒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的,我正在运行本地bazel开发版本(sha 956810b6ee24289e457a4b8d0a84ff56eb32c264)。

回答

3

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

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

如果您的构建测试繁重,您可以尝试使用--test_strategy = remote远程运行测试;不过,我不确定默认的Jvm配置是否可以工作。

如果你想远程运行整个构建,那么你需要告诉Bazel它正在执行的是哪种机器/操作系统。现在,这需要设置--host_cpu,并可能--crosstool_top/--host_crosstool_top为该平台配置C++编译器。

另外,一些平台的组合更多,更不太可能工作。特别是,将MacOS和Linux或不同风格的Linux相结合的可能性要高于Windows。

+1

哦哇。不知道。 Out use case特别围绕利用其他体系结构而不是我们的本地机器。有关于GH的问题吗?我们可以遵循的东西? –

+0

我编辑我的答案是更完整一点。我不知道生长激素问题,但它在我们的待办事项清单上,以支持这个即将到来的问题。 –

相关问题