使用GoCenter,扬帆雅典快速上游

更新:从2021年5月1日起,GoCenter中央存储库已经被淘汰,所有功能都已弃用。有关中心日落的更多信息请阅读弃用博客

似乎每个人都在把自己的船下水。由谷歌开发的Go(或GoLang)已被许多其他大型公司用于开发大型项目。

JFrog也接受了围棋,编写了JFrog CLI而且JFrog x光在围棋中,和制造GoCenter,一个公共的围棋模块库社区可用

围棋的日益普及鼓励了一群支持围棋的工程师Gophersource发射雅典奥运会项目作为一个开源项目。Athens是一个Go模块存储库,您可以在自己的基础设施上私下托管它。它存储来自公共代码和私有代码的不可变模块,因此您的构建从Athens的存储库中提取依赖项,而不是直接从像GitHub这样的版本控制系统中提取依赖项。

骑的电流

Athens和GoCenter执行一些类似的功能,甚至充当一种Artifactory虚拟库本地和远程Go依赖。对于主要使用Go的组织来说,Athens是一个强大而流行的解决方案去模块

Athens的一个重要特性是能够为它交付的Go模块使用上游存储库。当上游存储库配置为直接访问时,Athens将尝试从上游存储库中获取每个请求的Go模块,而不是从版本控制系统中的源代码(例如,GitHub)或自己的缓存中获取。

当您的系统使用多个Athens服务器时,这可能特别有用,可以使它们保持同步,并确保组织中使用给定版本的Go模块的每个构建都完全相同。

当您将Athens配置为使用GoCenter作为上游存储库时,Athens将尝试从GoCenter的存储库中完成对Go模块的每个请求,该存储库中有超过5万个(而且还在增长!)公共模块。GoCenter持有的每个版本模块都是不可变的,永远不会被删除。

通过这种方式,您可以使用Athens及其所有伟大的特性进行Go开发,同时受益于GoCenter提供的版本化模块的保证不变性和可用性。

让所有船只都浮在水面

一旦将Athens配置为直接访问模式,使用GoCenter作为上游存储库,它将不再自动从它们的源或Athens缓存中提取Go模块。如果在GoCenter中没有找到Go模块,它将返回一个404 Not found错误,导致构建失败。

如果该模块是一个公共模块,您可以通过向GoCenter提交该模块的包含请求来补救这个问题。一旦得到批准和处理,该Go模块的不可变版本就可以用于构建。它还将帮助Go社区,让每个使用GoCenter的人都可以使用它。

如果所需的模块位于私有存储库中(或者您不能或不希望向GoCenter添加公共模块),那么您可以在配置文件中将该模块显式声明为过滤器(使用“+”)。当你这样做时,Athens将绕过GoCenter从它的源获取该模块,并将其缓存到Athens以备将来的请求。为了使构建成功,您可以根据需要声明任意数量的这些模块。

配置雅典使用GoCenter

默认情况下,Athens从上游VCS(如github.com)获取模块代码,但这可以配置为使用GoCenter作为你的Go模块仓库。

  1. 创建一个筛选文件(例如/usr/local/lib/FilterForGoCenter)和信D(代表“直接访问”)在第一行。您还可以声明任何在GoCenter之外可以找到的私有模块。详细信息请参见相关文档滤波模块
    #直接从上游存储库(GoCenter)获取模块的FilterFile # -指定直接访问d# -声明所有不能在GoCenter + github.com/myGoModule/my-private-module-for-go中找到的模块的来源

  2. 如果不使用配置文件,则创建一个新的配置文件(基于样本config.dev.toml)并编辑值以匹配您的环境。此外,在当前或新的配置文件中,根据建议设置以下参数:
    FilterFile = "/usr/local/lib/FilterForGoCenter" GlobalEndpoint = "https://gocenter.io"

  3. 重新启动Athens,指定更新的当前或新的配置文件。
    $ CD $ ./proxy -config_file myconfig.dev.toml . file
  4. 使用“尝试雅典“预排的例子。

扬帆起航

GoCenter和Athens都寻求加强和使Go生态系统多样化,我们知道您希望能够选择您认为最适合您的工具。如果您已经在使用Athens,那么使用GoCenter作为上游存储库可以让您从两者的最佳特性中受益。

如果你也使用其他软件技术,如Docker、Helm、npm或Maven,你可能也想这样做给JFrog Artifactory一个尝试,以了解这个强大的存储库管理器如何为您的软件交付供应链带来洞察。除了你的Go模块和构建,这个通用的解决方案可以帮助你控制二进制文件的所有方式,你使用它们。

我们将继续与其他Go项目合作,我们很自豪能与Athens一起帮助开发者社区发展Go。