当不支持沙盒时,有没有办法让bazel使用沙盒目录?

时间:2017-05-02 17:46:30

标签: docker go circleci bazel

我在码头工人容器内运行bazel。在本地,当我在没有标志的情况下运行bazel时,我收到以下警告:

  

警告:系统不支持沙盒执行,因此无法保证动作的密封性。有关详细信息,请参阅http://bazel.build/docs/bazel-user-manual.html#sandboxing。您可以通过--ignore_unsupported_sandboxing关闭此警告。

虽然我失去了对气密性的保证,但在运行我的任何一代规则之前,Bazel仍会创建所有沙盒目录。

然而,在CI中,我没有看到该警告,而是在尝试沙盒时只是失败。所以我通过了--genrule_strategy=standalone来阻止崩溃,但现在我的工程师正在工作区中执行,我绝对不想要。

有没有办法让我获得我在本地看到的行为,其中显式沙盒调用被禁用,因为它们会失败但是仍然会发生正确复制srcs / deps / data的tmp目录创建?

我可以传递给bazel触发该行为的旗帜,或者我可以对我的系统做些什么来说服bazel那里不支持沙箱?

2 个答案:

答案 0 :(得分:1)

当你试图使用沙盒时,你使用哪个bazel版本崩溃?我怀疑c2d773ef4c0916a44fd7936f7bbc22ec55102915会解决这个问题,因为它可以检测沙箱的工作是否更加健壮,这似乎可以满足您的需求。

答案 1 :(得分:1)

两种可能的选择:

1)要禁用沙盒,--genrule_strategy=standalone仅适用于genrule。您还需要为其他规则禁用它,即添加--spawn_strategy=standalone。您可能还需要针对特定​​规则类型禁用它,例如--strategy GoCompile=standalone

2)要使用沙盒,您可以在特权容器中运行Bazel,即使用--privileged标志启动其容器。这可能是您的CI中的配置选项。