仅从内部 go 代理下载私有模块,并从外部代理获取公共模块



我开始迁移一个 Go 项目以使用模块进行依赖管理。我的公司有一个内部 go 代理,仅托管私有模块。因此,我需要一种方法从内部代理下载 PRIVATE 模块,比如说goproxy.company.com和公共模块,如golang.org/x/tools/cmd/goimportsgithub.com/sirupsen/logrus从公开可用的 go 代理(如proxy.golang.org(下载。我以为这会解决它。

GOPROXY='goproxy.company.com,proxy.golang.org,direct'

GPPRIVATE=*.company.com/*

但是,它在尝试第一个代理和第二个代理后失败,并且从不使用direct选项作为回退。这是一个已知问题还是我在这里做错了什么?

有没有更好的方法可以做到这一点?公司内部代理是否应该托管公开可用的 go 模块?这是普遍的期望吗?

阅读文档后我有这种感觉。以下是参考资料。

如提案中所述:保护公共围棋模块生态系统

我们希望企业环境可以通过内部代理获取所有模块,包括公共模块和私有模块;

此外,在公司代理的 go 文档中

例如,如果一家公司运行为私有模块提供服务的模块代理,用户将使用以下内容配置 go:

GOPRIVATE=*.corp.example.com 
GOPROXY=proxy.example.com 
GONOPROXY=none

这将告诉 go 命令和其他工具模块开始 具有 corp.example.com 子域是私有的,但公司 代理应该用于下载公共和私有模块, 因为GONOPROXY已设置为与任何模式都不匹配的模式 模块,覆盖GOPRIVATE

Go 1.15 添加了一项功能,现在允许您设置GOPROXY以跳过代理。

从 Go 1.15 发行说明:

GOPROXY 环境变量现在支持跳过以下代理: 返回错误。代理 URL 现在可以用逗号 (,( 分隔 或管道字符 (|(。如果代理 URL 后跟逗号,则 命令将仅在 404 或 410 之后尝试列表中的下一个代理 HTTP 响应。如果代理 URL 后跟管道字符,则 命令将在出现任何错误后尝试列表中的下一个代理。请注意, GOPROXY 的默认值仍然是 https://proxy.golang.org,direct, 在出现错误时不会回退到直接。

这应该允许您按照问题中的指示设置GOPROXY

最新更新