如何解决Bazel的http_file的调试身份验证
我想通过HTTP在Bazel中获取一些数据。看起来像我想要的http_file method。我从中获取的远程服务器使用身份验证,因此我将其写为
load("@bazel_tools//tools/build_defs/repo:http.bzl","http_file")
http_file(
name = "data_file",urls = ["https://example.com/data.0.1.2"],sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",downloaded_file_path = "data_file",)
尝试构建时,我得到
警告:从https://example.com/data.0.1.2下载失败:com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException类返回401未经授权
紧接着是致命错误,因为文件不存在。
该错误使我认为我没有正确进行身份验证。我有一个.netrc
文件,curl
可以使用它来获取文件。
我可以调试吗?如果它是卷曲的,我将传递-v
并看到auth标头随请求一起发送。我不确定bazel是否无法发送任何身份验证或身份验证不正确。
在Mac OS(达尔文19.6.0)和Linux(Ubuntu 18.04)上运行Bazel 3.2.0。
解决方法
HTTP 401确实听起来好像不正确或根本没有经过身份验证。 .netrc
应该得到支持和认可。如果未使用netrc
属性明确指定,则如果${HOME}/.netrc
在环境中并且bazel在非Windows主机上运行,则将尝试HOME
(从bazel 1.1开始就是这种情况;不久之后如果变量在环境中并且在Windows上运行,则返回0.29)或%USERPROFILE%/.netrc
(从3.1开始就是这种情况)。冒着明显的风险,.netrc
应该由运行它的进程所使用的同一UID拥有,并且其权限应为0600
。如果需要除http basic之外的其他身份验证方法,则需要使用auth_patterns
属性进行配置。
我不知道有任何现成的存储库规则调试工具,例如CLI标志,但是在这种情况下,应该能够从仪器tools/build_defs/repo
复制规则和函数的实现它从中获取调试信息并将其用于此目的。对于初学者来说,可能只是print(auth)
中产生的auth = _get_auth(ctx,all_urls)
来看看该规则是否具有有关如何与有问题的主持人交谈的正确想法。对于每个单独的dict
条目,它应该是type
,其中包含login
,password
,urls
信息。魔术本身发生在use_netrc
中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。