如何使用 Artifactory 作为 Go 模块的本地存储库
How to use Artifactory as a local repository for Go modules
- 我已设置并运行 Artifactory,为其他工件(RPM 等)提供服务
- 我想要 public 的本地副本以及私有 Go 程序和库
- 保证版本一致性
- 让 public 存储库消除错误
- 让 public 存储库免受未经授权的更改
- 我在 Artifactory 中创建了一个 Go 存储库,并使用 frog-cli(它创建了一个 zip 文件和一个 mod 文件)spf13/viper 填充它作为示例
问题:
- zip 文件是在 Artifactory 中存储 Go mod规则的正确方法吗?
- 如何在 Go 程序中使用 zip 文件?例如。获取 zip 文件的 URL 是 http://hostname/artifactory/reponame/github.com/spf13/viper/@v/v1.6.1.zip(mod 文件是 .mod)例如,我是否将 GOPATH 设置为某个值?
- 有没有办法确保所有需求都自动包含在本地 Artifactory 存储库中?在主包(例如 viper)包含到本地 Artifactory 存储库时?
首先回答第 3 个问题 -
这是另一篇有帮助的文章 - https://jfrog.com/blog/why-goproxy-matters-and-which-to-pick/. There are two ways to publish private go modules to Artifactory. The first is a traditional way i.e. via JFrog CLI that's highlighted in another article。
另一种方法是将远程存储库指向私有 GitHub 存储库。最近添加了此功能。在这种情况下,虚拟存储库将有两个远程。第一个远程存储库默认为 GoCenter,通过它获取 public go 模块。第二个远程存储库指向私有 VCS 系统。
将 GOPROXY 设置为仅虚拟 go 模块存储库将确保 Artifactory 继续成为 public 和私有 go 模块的真实来源。如果您想存储已编译的 go 二进制文件,您可以使用本地通用存储库,但建议使用自定义布局来构建通用存储库的内容。
回答前 2 个问题 -
Go 模块是 Golang 中的包管理器,类似于 Java 的 maven。在 Artifactory 中,对于每个 go 模块,每个 go 模块版本都有 3 个文件:go.mod、.info 和存档文件。
Artifactory 遵循 GOPROXY 协议,因此 go.mod 中提到的依赖项将自动从虚拟存储库中获取。这也将包括存档文件,它是包(源文件)的集合。
还有为 public go 模块存储的额外元数据,例如磁贴和查找请求,因为 GoSumDB 请求被缓存以确保即使在气隙环境中,Artifactory 仍然是模块和元数据的真实来源。
- 我已设置并运行 Artifactory,为其他工件(RPM 等)提供服务
- 我想要 public 的本地副本以及私有 Go 程序和库
- 保证版本一致性
- 让 public 存储库消除错误
- 让 public 存储库免受未经授权的更改
- 我在 Artifactory 中创建了一个 Go 存储库,并使用 frog-cli(它创建了一个 zip 文件和一个 mod 文件)spf13/viper 填充它作为示例
问题:
- zip 文件是在 Artifactory 中存储 Go mod规则的正确方法吗?
- 如何在 Go 程序中使用 zip 文件?例如。获取 zip 文件的 URL 是 http://hostname/artifactory/reponame/github.com/spf13/viper/@v/v1.6.1.zip(mod 文件是 .mod)例如,我是否将 GOPATH 设置为某个值?
- 有没有办法确保所有需求都自动包含在本地 Artifactory 存储库中?在主包(例如 viper)包含到本地 Artifactory 存储库时?
首先回答第 3 个问题 -
这是另一篇有帮助的文章 - https://jfrog.com/blog/why-goproxy-matters-and-which-to-pick/. There are two ways to publish private go modules to Artifactory. The first is a traditional way i.e. via JFrog CLI that's highlighted in another article。
另一种方法是将远程存储库指向私有 GitHub 存储库。最近添加了此功能。在这种情况下,虚拟存储库将有两个远程。第一个远程存储库默认为 GoCenter,通过它获取 public go 模块。第二个远程存储库指向私有 VCS 系统。
将 GOPROXY 设置为仅虚拟 go 模块存储库将确保 Artifactory 继续成为 public 和私有 go 模块的真实来源。如果您想存储已编译的 go 二进制文件,您可以使用本地通用存储库,但建议使用自定义布局来构建通用存储库的内容。
回答前 2 个问题 -
Go 模块是 Golang 中的包管理器,类似于 Java 的 maven。在 Artifactory 中,对于每个 go 模块,每个 go 模块版本都有 3 个文件:go.mod、.info 和存档文件。
Artifactory 遵循 GOPROXY 协议,因此 go.mod 中提到的依赖项将自动从虚拟存储库中获取。这也将包括存档文件,它是包(源文件)的集合。
还有为 public go 模块存储的额外元数据,例如磁贴和查找请求,因为 GoSumDB 请求被缓存以确保即使在气隙环境中,Artifactory 仍然是模块和元数据的真实来源。