請求具有上游存儲庫的軟件包版本 - CodeArtifact

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

請求具有上游存儲庫的軟件包版本

當客戶端(例如 npm)從具有多個上游 CodeArtifact 存儲庫的名my_repo為的存儲庫請求軟件包版本時,可能會發生以下情況:

  • 如果my_repo包含請求的軟件包版本,則將其返回給客戶端。

  • 如果my_repo不包含請求的軟件包版本,請在上游存儲庫中my_repo查 CodeArtifact找它。如果找到套件版本,則會將其參照複製到my_repo,並將套件版本傳回給用戶端。

  • 如果其上游存放庫都my_repo不包含套件版本,則會將 HTTP 404 Not Found 回應傳回給用戶端。

當您使用create-repositoryupdate-repository指令新增上游儲存庫時,在要求套件版本時,它們傳遞至--upstreams參數的順序會決定其優先順序。請求套件版本時,依您 CodeArtifact 要使用的順序指定上游儲存庫。--upstreams如需詳細資訊,請參閱 上游存放庫優先順序

一個儲存庫允許的直接上游儲存庫數目上限為 10。由於直接上游存儲庫也可以擁有自己的直接上游存儲庫,因此 CodeArtifact 可以在 10 個以上的軟件庫中搜索軟件包版本。當要求套件版本時, CodeArtifact 查找的儲存庫數目上限為 25。

從上游儲存庫保留 Package

如果在上游存放庫中找到要求的套件版本,則會保留對該套件的參考,並且永遠可從下游存放庫中取得。保留的套件版本不受下列任何一項影響:

  • 刪除上游存放庫。

  • 中斷上游存放庫與下游存放庫的連線。

  • 從上游存放庫刪除套件版本。

  • 編輯上游存放庫中的套件版本 (例如,向其新增資產)。

透過上游關係擷取套件

如果 CodeArtifact 存放庫與具有外部連線的存放庫具有上游關係,則會從外部存放庫複製不在上游存放庫中的套件要求。例如,請考慮下列組態:名為的存放庫repo-A具有名為的上游存放庫repo-Brepo-B有一個外部連接到 https://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),因為這是npm從中repo-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" } ] }

由於與 https://npmjs.com repo-B 有外部連接,所有從 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" }

中繼儲存庫中的 Package 保留

CodeArtifact 允許鏈接上游存儲庫。例如,repo-A可以有一repo-B個上游,並且repo-Brepo-C以有一個上游。此配置使軟件包版本在中repo-B並從中repo-C提供repo-A

簡單的上游存儲庫圖顯示三個鏈接在一起的存儲庫。

當套裝程式管理員連線至儲存庫repo-A並從儲存庫擷取套裝程式版本時repo-C,套件版本將不會保留在儲存庫repo-B中。套件版本只會保留在最下游的存放庫中,在此範例中為。repo-A它不會保留在任何中間存儲庫中。對於較長的鏈結也是如此;例如,如果有四個存放庫repo-Arepo-Brepo-Crepo-D和一個連接到從中repo-A擷取套件版本的套件管理員repo-D,則套件版本會保留在或中,repo-A但不會保留在repo-Brepo-C中。

從外部存放庫提取 Package 裝軟體版本時,封裝保留行為類似,只是套件版本一律會保留在已附加外部連線的存放庫中。例如,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因為它是一個中間存儲庫。