本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
请求包含上游存储库的程序包版本
当客户端(例如 npm)从具有多个上游存储库的名为my_repo
的 CodeArtifact 存储库请求软件包版本时,可能会发生以下情况:
-
如果
my_repo
包含请求的程序包版本,则将该版本返回给客户端。 -
如果
my_repo
不包含请求的软件包版本,则在上游存储库中my_repo
查 CodeArtifact找。如果找到了程序包版本,则会将对该版本的引用复制到my_repo
,并将程序包版本返回给客户端。 -
如果
my_repo
和其上游存储库都不包含程序包版本,则会向客户端返回 HTTP 404Not Found
响应。
使用 create-repository
或 update-repository
命令添加上游存储库时,它们传递给 --upstreams
参数的顺序决定了在请求程序包版本时它们的优先级。按照--upstreams
请求软件包版本时 CodeArtifact 要使用的顺序指定上游存储库。有关更多信息,请参阅 上游存储库优先顺序。
一个存储库允许的直接上游存储库的最大数量为 10。由于直接上游存储库也可以拥有自己的直接上游存储库,因此 CodeArtifact 可以在 10 个以上的存储库中搜索软件包版本。请求软件包版本时 CodeArtifact 查看的最大存储库数为 25。
上游存储库的程序包保留
如果在上游存储库中找到了请求的程序包版本,则会保留对该版本的引用,并且始终可以从下游存储库中使用。保留的程序包版本不受以下任何因素的影响:
-
删除上游存储库。
-
断开上游存储库与下游存储库的连接。
-
从上游存储库中删除程序包版本。
-
在上游存储库中编辑程序包版本(例如,向其中添加新资产)。
通过上游关系提取程序包
如果 CodeArtifact 存储库与具有外部连接的存储库存在上游关系,则会从外部存储库中复制对不在上游存储库中的软件包的请求。例如,考虑以下配置:名为 repo-A
的存储库有一个名为 repo-B
的上游存储库。repo-B
与 https://npmjs.com
![简单的上游存储库示意图,其中显示了链接在一起的三个存储库。](images/upstream-with-external.png)
如果将 npm
配置为使用 repo-A
存储库,则运行 npm install
会触发将程序包从 https://npmjs.comrepo-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
),因为这是 npm
从 repo-A
提取的版本。
aws codeartifact list-package-versions --repository
repo-A
--domainmy_domain
\ --domain-owner111122223333
--formatnpm
--packagelodash
输出示例:
{ "package": "
lodash
", "format": "npm
", "versions": [ { "version": "4.17.15", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ] }
由于 repo-B
与 https://npmjs.comrepo-B
中。任何与 repo-B
建立了上游关系的下游存储库可能已经提取这些程序包版本。
repo-B
中记录了随着时间推移从 https://npmjs.comlodash
程序包的所有版本,可以使用 list-package-versions
,如下所示。
aws codeartifact list-package-versions --repository
repo-B
--domainmy_domain
\ --domain-owner111122223333
--formatnpm
--packagelodash
--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-B
和 repo-C
中的程序包版本。
![简单的上游存储库示意图,其中显示了链接在一起的三个存储库。](images/upstream-chaining.png)
当程序包管理器连接到存储库 repo-A
并从存储库 repo-C
中提取程序包版本时,程序包版本将不会保留在存储库 repo-B
中。程序包版本将仅保留在最下游的存储库中,在此示例中为 repo-A
。程序包版本不会保留在任何中间存储库中。对于较长的链也是如此;例如,如果有四个存储库 repo-A
、repo-B
、repo-C
和 repo-D
,一个连接到 repo-A
的程序包管理器从 repo-D
提取程序包版本,则程序包版本将保留在 repo-A
中,但不会保留在 repo-B
或 repo-C
中。
从外部存储库提取程序包版本时,程序包保留行为与之类似,不同之处在于程序包版本始终保留在连接了外部连接的存储库中。例如,repo-A
使用 repo-B
作为上游。repo-B
使用 repo-C
作为上游,并且 repo-C
还配置了 npmjs.com 作为外部连接;请参见下图。
![上游存储库图,其中显示了三个存储库链接在一起,并与 npmjs.com 建立了外部连接。](images/upstream-chaining-external.png)
如果连接到 repo-A
的程序包管理器请求程序包版本(例如,lodash 4.17.20),而三个存储库中的任何一个都不存在该程序包版本,则将从 npmjs.com 提取该程序包版本。当提取 lodash 4.17.20 时,该版本将保留在 repo-A
(因为这是最下游的存储库)和 repo-C
(因为它与 npmjs.com 建立了外部连接)中。lodash 4.17.20 不会保留在 repo-B
中(因为这是中间存储库)。