本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
請求具有上游存儲庫的軟件包版本
當客戶端(例如 npm)從具有多個上游 CodeArtifact 存儲庫的名my_repo
為的存儲庫請求軟件包版本時,可能會發生以下情況:
-
如果
my_repo
包含請求的軟件包版本,則將其返回給客戶端。 -
如果
my_repo
不包含請求的軟件包版本,請在上游存儲庫中my_repo
查 CodeArtifact找它。如果找到套件版本,則會將其參照複製到my_repo
,並將套件版本傳回給用戶端。 -
如果其上游存放庫都
my_repo
不包含套件版本,則會將 HTTP 404Not Found
回應傳回給用戶端。
當您使用create-repository
或update-repository
指令新增上游儲存庫時,在要求套件版本時,它們傳遞至--upstreams
參數的順序會決定其優先順序。請求套件版本時,依您 CodeArtifact 要使用的順序指定上游儲存庫。--upstreams
如需詳細資訊,請參閱 上游存放庫優先順序。
一個儲存庫允許的直接上游儲存庫數目上限為 10。由於直接上游存儲庫也可以擁有自己的直接上游存儲庫,因此 CodeArtifact 可以在 10 個以上的軟件庫中搜索軟件包版本。當要求套件版本時, CodeArtifact 查找的儲存庫數目上限為 25。
從上游儲存庫保留 Package
如果在上游存放庫中找到要求的套件版本,則會保留對該套件的參考,並且永遠可從下游存放庫中取得。保留的套件版本不受下列任何一項影響:
-
刪除上游存放庫。
-
中斷上游存放庫與下游存放庫的連線。
-
從上游存放庫刪除套件版本。
-
編輯上游存放庫中的套件版本 (例如,向其新增資產)。
透過上游關係擷取套件
如果 CodeArtifact 存放庫與具有外部連線的存放庫具有上游關係,則會從外部存放庫複製不在上游存放庫中的套件要求。例如,請考慮下列組態:名為的存放庫repo-A
具有名為的上游存放庫repo-B
。 repo-B
有一個外部連接到 https://npmjs.com
如果設定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" } ] }
由於與 https://npmjs.com repo-B
repo-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" }
中繼儲存庫中的 Package 保留
CodeArtifact 允許鏈接上游存儲庫。例如,repo-A
可以有一repo-B
個上游,並且repo-B
可repo-C
以有一個上游。此配置使軟件包版本在中repo-B
並從中repo-C
提供repo-A
。
當套裝程式管理員連線至儲存庫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
中。
從外部存放庫提取 Package 裝軟體版本時,封裝保留行為類似,只是套件版本一律會保留在已附加外部連線的存放庫中。例如,repo-A
具有repo-B
作為上游。 repo-B
具有上游repo-C
,並且repo-C
還將 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
因為它是一個中間存儲庫。