Files
Aaron Schlesinger c2c5daf61a Switching to using the main default branch (#1628)
* Switching to using the main default branch

* changing links to main branch, not master branch

* Changing a few links to relative

* Bumping chart version

Co-authored-by: Marwan Sulaiman <marwan.sameer@gmail.com>
2020-06-15 16:44:37 -04:00

3.0 KiB
Executable File
Raw Permalink Blame History

title, date, weight
title date weight
为什么Athens重要 2018-11-06T13:58:58-07:00 4

不变性

Go社区的许多问题都是由于库library的消失或者在没有告警的情况下突然变化所引起的。上游的软件包维护人员很容易对他们的代码进行更改但这可能会破坏您的代码而大多数情况下这是一个意外 如果您的软件使用的某个依赖项执行下列操作,该软件的构建是否会中断?

  • 提交Commit abdef 被删除了
  • 标签Tag v0.1.0 被强制推送push
  • 源码库被完全删除

由于应用程序的依赖项直接来自VCS版本控制系统如Github因此上述情况都可能发生在您身上并且当它们发生时您的软件的构建过程可能会中断-哦,不! Athens通过将代码从VCS复制到_不可变_存储中来解决这些问题。

在这种方式下您就不需要手动将任何内容上传到Athens后端存储。Go第一次向Athens请求依赖包时Athens会从VCSGithub、Bitbucket等获取。但一旦检索到该模块它将永远保存在Athens的后端存储中并且代理将不再返回到VCS中获取同一版本的依赖包。这就是雅典如何实现模块不变性。需要注意的是后端存储掌握在您的手中。

逻辑

go命令行现在可以ping 您自己的服务器 来下载依赖项这意味着您可以编写任何需要的逻辑来提供这种依赖项。包括访问控制下面将讨论、添加自定义版本、自定义分支和自定义包等。例如Athens提供了一个验证钩子hook每个模块下载时都会调用它来确定是否应该下载此模块。因此您可以用自己的逻辑扩展athens比如扫描模块路径或代码以查找标红代码等。

性能

从Athens下载存储的依赖关系_显著_比从版本控制系统下载依赖更快。这是因为go get默认情况下使用VCS的下载模块例如git clone。而go get启用GOPROXY时将使用HTTP下载zip压缩包。因此根据您的计算机和网络连接速度从GitHub下载CockroachDB源代码zip文件只需要10秒但git clone需要将近4分钟。

访问控制

比软件包消失更糟糕的是软件包可能是恶意的。为了确保您的团队或公司不会安装此类恶意软件包当go命令行请求一个被排除的模块恶意软件您可以让代理服务器返回500。这将导致构建失败因为Go需要200 HTTP响应码。使用Athens您可以通过过滤器filter文件实现此目的。

Vendor 目录成为可选

有了不变的、高性能和高鲁棒性的代理服务器用户不再需要在每个库中都将vendor目录纳入其版本控制。go.sum文件确保在第一次安装之后不会处理任何包。此外您的CI/CD在每次构建安装所有依赖项时都只需要很短的时间。