用GoCenter让雅典迅速逆流而上

更新:截至2021年5月1日,GoCenter中央存储库已经关闭,所有功能都已弃用。有关中心日落的更多信息,请阅读弃用博客文章
似乎每个人都在把自己的船下水。Go(或GoLang)由谷歌开发,已被许多其他大公司用于开发大型项目。
JFrog也接受了Go,编写了JFrog CLI和JFrog x光在围棋和制作GoCenter,一个Go模块的公共存储库,可供社区使用.
Go语言被越来越多的人接受,鼓励了一群支持Go语言的工程师Gophersource发射雅典奥运会项目去年作为一个开源项目。Athens是一个Go模块存储库,您可以在自己的基础设施上私人托管。它存储来自公共代码和私有代码的不可变模块,因此您的构建从Athens的存储库中提取依赖,而不是直接从GitHub这样的版本控制系统中提取。
乘风破浪
雅典和GoCenter有一些相似的功能,甚至是一种工件虚拟存储库用于本地和远程Go依赖。对于主要使用Go语言的组织来说,Athens是一个强大而流行的解决方案去模块.
Athens的一个重要特性是能够为它交付的Go模块使用上游存储库。当上游存储库配置为直接访问时,Athens将尝试从上游存储库获取每个请求的Go模块,而不是从版本控制系统中的源(例如,GitHub)或自己的缓存中获取。
当您的系统使用多个Athens服务器时,这可能特别有用,以保持它们同步,并确保组织中使用给定版本的Go模块的每个构建都具有完全相同的版本。
当你将Athens配置为使用GoCenter作为上游存储库时,Athens将尝试从GoCenter的超过50,000个(并且还在增长!)公共模块的存储库中满足每个Go模块的请求。GoCenter持有的每个版本模块都是不可变的,并且永远不会被删除。
通过这种方式,您可以使用Athens及其所有强大的Go开发功能,同时受益于GoCenter提供的版本化模块的保证不变性和可用性。
让所有的船都浮起来
一旦Athens被配置为直接访问模式,使用GoCenter作为上游存储库,它将不再自动从源代码或Athens缓存中提取Go模块。如果在GoCenter中没有找到Go模块,它将返回404 Not found错误,导致构建失败。
如果该模块是公共模块,您可以通过向GoCenter提交该模块的包含请求来解决这个问题。一旦获得批准和处理,该Go模块的不可变版本将可用于您的构建。它还将帮助Go社区,让每个使用GoCenter的人都可以使用它。
如果需要的模块在私有存储库中(或者你不能或不想向GoCenter添加公共模块),那么你可以在配置文件中显式地将模块声明为过滤器(使用“+”)。当你这样做,雅典将绕过GoCenter从它的源获取模块,并缓存它在雅典为将来的请求。您可以根据构建成功所需声明任意数量的这些模块。
配置Athens使用GoCenter
默认情况下,Athens从上游VCS(如github.com)获取模块代码,但这可以配置为使用GoCenter作为Go模块存储库。
- 创建一个过滤器文件(例如/usr/local/lib/FilterForGoCenter)附信D(代表“直接访问”)在第一行。你也可以声明任何在GoCenter外部找到的私有模块。有关详细信息,请参见文档滤波模块.
# FilterFile用于直接从上游存储库(GoCenter)获取模块# -指定直接访问d# -声明在GoCenter + github.com/myGoModule/my-private-module-for-go中找不到的所有模块的源代码 - 如果您没有使用配置文件,请创建一个新的配置文件(基于样本config.dev.toml)并编辑值以匹配您的环境。另外,在当前或新的配置文件中,根据建议设置以下参数:
FilterFile = "/usr/local/lib/FilterForGoCenter" GlobalEndpoint = "https://gocenter.io" - 重新启动雅典指定更新的当前或新的配置文件。
$ CD $ ./proxy -config_file myconfig.dev.toml
- 验证新配置试试雅典演练的例子。
扬帆起航
GoCenter和Athens都在寻求加强和多样化Go生态系统,我们知道您希望能够选择您认为最适合您的工具。如果您已经在使用Athens,那么使用GoCenter作为您的上游存储库可以让您受益于每个版本的最佳功能。
如果你还使用其他软件技术,如Docker、Helm、npm或Maven,你可能也想这样做试试JFrog Artifactory吧,以了解这个强大的存储库管理器如何为您的软件交付供应链带来洞察力。除了Go模块和构建之外,这个通用解决方案还可以帮助您以使用它们的所有方式控制二进制文件。
我们将继续与其他Go项目合作,我们很自豪能与Athens一起帮助开发者社区获得Go- going。
