如何取消bazelrc中设置的标志?
My bazel.rc具有设置远程缓存的标志,但在某些情况下,我希望禁用它,例如在具有网络限制的环境中运行时 如何“取消设置”bazel.rc中设置的标志?例如,bazel.rc设置了如何取消bazelrc中设置的标志?,bazel,Bazel,My bazel.rc具有设置远程缓存的标志,但在某些情况下,我希望禁用它,例如在具有网络限制的环境中运行时 如何“取消设置”bazel.rc中设置的标志?例如,bazel.rc设置了--google_-credentials=/path/to/key,那么我如何覆盖它并传入null以便它不查找凭据呢 我想保留bazel.rc的其余部分,所以我不想简单地忽略它 部分bazel.rc: build --google_credentials=/path/to/key build --google_d
--google_-credentials=/path/to/key
,那么我如何覆盖它并传入null以便它不查找凭据呢
我想保留bazel.rc的其余部分,所以我不想简单地忽略它
部分bazel.rc:
build --google_credentials=/path/to/key
build --google_default_credentials
build --google_auth_scopes=https://www.googleapis.com/auth/cloud-source-tools
build --bes_backend=buildeventservice.googleapis.com
build --bes_best_effort=false
build --bes_timeout=10s
build --project_id=123456
build --remote_cache=remotebuildexecution.googleapis.com
build --remote_instance_name=projects/myproject
build --spawn_strategy=remote
build --genrule_strategy=remote
build --tls_enabled=1
build --remote_accept_cached=true
命令行上指定的标志将覆盖bazelrc文件中的任何内容。因此,您可以指定
--google\u credentials=
来清除该值
还有其他方法可以设置此设置。在您的例子中,假设您希望默认情况下使用--foo=1--bar=2
,但有时您希望关闭这些选项。必须记住所有的标志才能关闭,这样您就可以创建配置了,这会很烦人。您的bazelrc
文件如下所示:
build --foo=1 --bar=2
build:nofoo --foo= --bar=
当你正常地构建bazel时,你会得到
--foo=1
和--bar=2
。当您不需要foo
和bar
时,您需要bazel build--config=nofoo
,它扩展到bazel build--foo=1--bar=2--foo=--bar=
,后面的标志将覆盖前面的标志 传递--google_credentials=
不会清除该值(即将其设置为null
);相反,它将值设置为”
,导致无法打开身份验证凭据文件“”
Hmm,对。这将是我们的标志解析器的一个怪癖。我会提出一个关于无法将google_凭据设置为nothing的错误。另外,我在尝试这个时遇到了一个NullPointerException,这也是一个bug…所以实际上有一个解决方法,但它有点难看。有一个叫做调用策略的功能可以控制标志,但它是作为启动标志传递的,因此它不能与--config
:bazel--invocation\u policy=“flag\u policies{flag\u name:\”google\u凭证\”使用默认{}标志{策略{flag\u name:\“spawn\u策略\”使用默认{flag\u策略{flag\u name:\”genrule\u strategy\'use\u default{}flag\u policies{flag\u name:'remote\u cache\'use\u default{}flag\u policies{flag\u name:\'bes\u backend\'use\u default{}build
。如果需要,可以将其放入shell变量中,然后执行bazel$NO\u remote build
。它不是非常优雅,但应该能用。您还可以创建别名或shell函数,如bazel_no_remote
。您还可以将打开远程缓存的标志移动到它们自己的配置中,但是您必须记住在每次调用时使用该配置。一个包含所有标志,减去远程缓存标志。然后,您的~/.bazelrc
文件导入带有所有标志的文件,并添加远程缓存标志。默认情况下,通过这种方式可以获得远程缓存,要关闭远程缓存,可以使用~/other_rc_file
指定--bazelrc
启动标志。但是我注意到你说的是“bazelrc”,它通常在你的仓库中,所以你的旗帜必须存在于你的主目录中的bazelrc文件中。