【问题标题】:Managing custom Go modules accessed via non-standard ports管理通过非标准端口访问的自定义 Go 模块
【发布时间】:2021-08-21 20:03:32
【问题描述】:

背景

在我的公司,我们使用 Bit Bucket 来托管我们的 git 存储库。到服务器的所有流量都流经一个自定义的非标准端口。从我们的 repos 克隆看起来像 git clone ssh://git@stash.company.com:9999/repo/path/name.git

问题

我想创建托管在此服务器上并由 go mod 管理的 Go 模块,但是,流量必须流经端口 9999 的事实使得这非常困难。这是因为go mod 在标准端口上运行,似乎没有提供为不同模块自定义端口的方法。

我的问题

是否可以使用go mod 管理托管在具有非标准端口的私有 git 服务器上的 Go 模块?

尝试的解决方案

供应

这似乎是最接近提供解决方案的方式。首先我 go mod vendor 想要使用这些 Go 模块的 Go 应用程序,然后我 git submodule vendor/ 目录中的 Go 模块。在需要更新或添加模块的情况下,这可以完美运行。 go mod tidy 将一直无法下载或更新其他 Go 模块,因为它无法访问自定义 Go 模块的“git URL”。即使设置了-e 标志。

编辑.gitconfig

编辑.gitconfig 以将不带端口的 URL 替换为带端口的 URL 是一种可行的解决方案,但这是一个非常肮脏的 hack。首先,必须对任何新模块以及每个单独的开发人员进行这些编辑。其次,这可能会在处理这些存储库时阻止其他 git 进程。

【问题讨论】:

  • golang.org/cmd/go/#hdr-Remote_import_paths中所述设置返回适当元标记的Web服务器
  • 如果您希望这些被广泛使用,您必须设置一个服务器来处理规范导入路径。否则,请配置您的本地 VCS 以处理不同的位置。
  • 上面的链接应该涵盖您需要的所有信息。前段时间我还专门询问了a similar question v1 以上的导入路径,其中也包含有用的上下文
  • (是预模块,但未接受的 .gitconfig 解决方案应该适合您!)

标签: go go-modules vendoring


【解决方案1】:

go 工具在后台使用 git,因此您需要在您的环境中配置 git 以使用备用 url。类似的东西

git config --global url."ssh://git@stash.company.com:9999/".insteadOf "https://stash.company.com"

虽然我记得 bitbucket/stash 有时会出于我不记得的原因提供额外的后缀,但您可能需要执行以下操作:

git config --global url."ssh://git@stash.company.com:9999/".insteadOf "https://stash.company.com/scm/"

附加编辑

下面提到的用户 bcmills,您还可以通过 HTTPS 提供 go-import 元数据,并使用您喜欢的任何虚 URL,只要您控制域解析。这可以通过不同程度的复杂性来完成,从 a simple nginx rulestatic content generatorsdedicated vanity services 甚至使用 Athens 运行您自己的模块代理

但是,这仍然不能完全解决构建环境配置的问题,因为您希望用户设置GOPRIVATEGOPROXY 或两者都设置,具体取决于您的配置。

此外,如果您选择的域可能在全球范围内可解析,您可能需要考虑注册它以防止它被潜在的恶意第三方注册。

【讨论】:

  • 这是我尝试过的,只是想看看我是否可以让它工作。但是,这不是一个长期的解决方案,因为它需要为每个开发人员复制这些编辑,并随着模块数量的增加添加新的。
  • 基于每个开发人员构建环境配置是很常见的事情,所以我不确定您还希望如何管理它。这与需要每个开发人员与私有的内部 VCS 建立身份没有太大区别。这已经是一种最佳实践。我不确定您所说的“随着模块数量的增加而添加的新模块”是什么意思。对 gitconfig 的全局更改应该处理来自您的内部仓库的任何模块。
  • “好的长期解决方案”是设置一个 HTTPS 服务器来为每个 golang.org/ref/mod#vcs-find 提供 go-import 元数据(在标准端口 443 上)。该元数据中的 repo-url 字段可以为 VCS 连接指定正确的端口。
猜你喜欢
  • 2020-01-01
  • 1970-01-01
  • 2019-02-20
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多