本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用上游儲存庫請求套件版本
當用戶端 (例如 npm) 從名為 的 CodeArtifact 儲存庫請求套件版本my_repo時,可能會發生下列情況:
-
如果
my_repo包含請求的套件版本,則會傳回給用戶端。 -
如果
my_repo不包含請求的套件版本,CodeArtifact 會在my_repo的上游儲存庫中尋找它。如果找到套件版本,則會將其參考複製到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
如果 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 --repositoryrepo-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 --repositoryrepo-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-B和 中的套件版本從 repo-C取得repo-A。
當套件管理員連線至儲存庫repo-A並從儲存庫 擷取套件版本時repo-C,套件版本將不會保留在儲存庫 中repo-B。套件版本只會保留在最下游的儲存庫中,在此範例中為 repo-A。它不會保留在任何中繼儲存庫中。對於較長的鏈結也是如此;例如,如果有四個儲存庫 repo-A、repo-C、 repo-B和 ,repo-D以及連線至從 repo-A 擷取套件版本的套件管理員repo-D,則套件版本會保留在 中repo-A,但不會保留在 repo-B或 中repo-C。
從外部儲存庫提取套件版本時,套件保留行為類似,但套件版本一律保留在連接外部連線的儲存庫中。例如, repo-A 將 repo-B作為上游。 repo-B 將 repo-C作為上游,repo-C並將 npmjs.com 設定為外部連線;請參閱下圖。
例如,如果連接到 的套件管理員repo-A請求套件版本,例如 lodash 4.17.20 」,而且套件版本不存在於三個儲存庫中的任何一個,則會從 npmjs.com:// 。擷取 lodash 4.17.20 xxxx 時,它將保留在 中repo-A,因為這是最下游的儲存庫,repo-C而且它已連接到 npmjs.com 的外部連線。lodash 的 4.17.20 不會保留在 中repo-B,因為這是中繼儲存庫。