请求包含上游存储库的程序包版本 - CodeArtifact

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

请求包含上游存储库的程序包版本

当客户端(例如 npm)从具有多个上游存储库的名为my_repo的 CodeArtifact 存储库请求软件包版本时,可能会发生以下情况:

  • 如果 my_repo 包含请求的程序包版本,则将该版本返回给客户端。

  • 如果my_repo不包含请求的软件包版本,则在上游存储库中my_repo查 CodeArtifact找。如果找到了程序包版本,则会将对该版本的引用复制到 my_repo,并将程序包版本返回给客户端。

  • 如果 my_repo 和其上游存储库都不包含程序包版本,则会向客户端返回 HTTP 404 Not Found 响应。

使用 create-repositoryupdate-repository 命令添加上游存储库时,它们传递给 --upstreams 参数的顺序决定了在请求程序包版本时它们的优先级。按照--upstreams请求软件包版本时 CodeArtifact 要使用的顺序指定上游存储库。有关更多信息,请参阅 上游存储库优先顺序

一个存储库允许的直接上游存储库的最大数量为 10。由于直接上游存储库也可以拥有自己的直接上游存储库,因此 CodeArtifact 可以在 10 个以上的存储库中搜索软件包版本。请求软件包版本时 CodeArtifact 查看的最大存储库数为 25。

上游存储库的程序包保留

如果在上游存储库中找到了请求的程序包版本,则会保留对该版本的引用,并且始终可以从下游存储库中使用。保留的程序包版本不受以下任何因素的影响:

  • 删除上游存储库。

  • 断开上游存储库与下游存储库的连接。

  • 从上游存储库中删除程序包版本。

  • 在上游存储库中编辑程序包版本(例如,向其中添加新资产)。

通过上游关系提取程序包

如果 CodeArtifact 存储库与具有外部连接的存储库存在上游关系,则会从外部存储库中复制对不在上游存储库中的软件包的请求。例如,考虑以下配置:名为 repo-A 的存储库有一个名为 repo-B 的上游存储库。repo-Bhttps://npmjs.com 建立了外部连接。

简单的上游存储库示意图,其中显示了链接在一起的三个存储库。

如果将 npm 配置为使用 repo-A 存储库,则运行 npm install 会触发将程序包从 https://npmjs.com 复制到 repo-B。已安装的版本也会提取到 repo-A。下面的示例会安装 lodash

$ npm config get registry https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-downstream-repo/ $ npm install lodash + lodash@4.17.20 added 1 package from 2 contributors in 6.933s

运行 npm install 后,repo-A 仅包含最新版本 (lodash 4.17.20),因为这是 npmrepo-A 提取的版本。

aws codeartifact list-package-versions --repository repo-A --domain my_domain \ --domain-owner 111122223333 --format npm --package lodash

输出示例:

{ "package": "lodash", "format": "npm", "versions": [ { "version": "4.17.15", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ] }

由于 repo-Bhttps://npmjs.com 建立了外部连接,所以从 https://npmjs.com 导入的所有程序包版本都存储在 repo-B 中。任何与 repo-B 建立了上游关系的下游存储库可能已经提取这些程序包版本。

repo-B 中记录了随着时间推移从 https://npmjs.com 导入的所有程序包及程序包版本。例如,要查看一段时间内导入的 lodash 程序包的所有版本,可以使用 list-package-versions,如下所示。

aws codeartifact list-package-versions --repository repo-B --domain my_domain \ --domain-owner 111122223333 --format npm --package lodash --max-results 5

输出示例:

{ "package": "lodash", "format": "npm", "versions": [ { "version": "0.10.0", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.2.2", "revision": "REVISION-2-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.2.0", "revision": "REVISION-3-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.2.1", "revision": "REVISION-4-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.1.0", "revision": "REVISION-5-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ], "nextToken": "eyJsaXN0UGFja2FnZVZlcnNpb25zVG9rZW4iOiIwLjIuMiJ9" }

中间存储库中的程序包保留

CodeArtifact 允许链接上游存储库。例如,repo-A 可以使用 repo-B 作为上游,而 repo-B 也可以使用 repo-C 作为上游。这个配置意味着在 repo-A 中可以获取 repo-Brepo-C 中的程序包版本。

简单的上游存储库示意图,其中显示了链接在一起的三个存储库。

当程序包管理器连接到存储库 repo-A 并从存储库 repo-C 中提取程序包版本时,程序包版本将不会保留在存储库 repo-B 中。程序包版本将仅保留在最下游的存储库中,在此示例中为 repo-A。程序包版本不会保留在任何中间存储库中。对于较长的链也是如此;例如,如果有四个存储库 repo-Arepo-Brepo-Crepo-D,一个连接到 repo-A 的程序包管理器从 repo-D 提取程序包版本,则程序包版本将保留在 repo-A 中,但不会保留在 repo-Brepo-C 中。

从外部存储库提取程序包版本时,程序包保留行为与之类似,不同之处在于程序包版本始终保留在连接了外部连接的存储库中。例如,repo-A 使用 repo-B 作为上游。repo-B 使用 repo-C 作为上游,并且 repo-C 还配置了 npmjs.com 作为外部连接;请参见下图。

上游存储库图,其中显示了三个存储库链接在一起,并与 npmjs.com 建立了外部连接。

如果连接到 repo-A 的程序包管理器请求程序包版本(例如,lodash 4.17.20),而三个存储库中的任何一个都不存在该程序包版本,则将从 npmjs.com 提取该程序包版本。当提取 lodash 4.17.20 时,该版本将保留在 repo-A(因为这是最下游的存储库)和 repo-C(因为它与 npmjs.com 建立了外部连接)中。lodash 4.17.20 不会保留在 repo-B 中(因为这是中间存储库)。