我在码头工人容器内运行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那里不支持沙箱?
答案 0 :(得分:1)
当你试图使用沙盒时,你使用哪个bazel版本崩溃?我怀疑c2d773ef4c0916a44fd7936f7bbc22ec55102915会解决这个问题,因为它可以检测沙箱的工作是否更加健壮,这似乎可以满足您的需求。
答案 1 :(得分:1)
两种可能的选择:
1)要禁用沙盒,--genrule_strategy=standalone
仅适用于genrule
。您还需要为其他规则禁用它,即添加--spawn_strategy=standalone
。您可能还需要针对特定规则类型禁用它,例如--strategy GoCompile=standalone
。
2)要使用沙盒,您可以在特权容器中运行Bazel,即使用--privileged
标志启动其容器。这可能是您的CI中的配置选项。