View a markdown version of this page

Bundler 相容性 - CodeArtifact

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

Bundler 相容性

本指南包含 CodeArtifact 與 Bundler 相容性的相關資訊。

Bundler 相容性

AWS CodeArtifact 建議 Bundler 2.4.11 或更高版本。如果您在安裝時遇到問題,請將 Bundler CLI 更新至最新版本。

Bundler 版本支援

在低於 2.4.11 的 Bundler 版本中,在 Bundler 決定查詢完整索引之前,Gemfile 中可以定義 500 個相依性specs.4.8.gz。由於 CodeArtifact 不支援完整索引,因此在使用低於 2.4.11 的 Bundler 版本時,指定超過 500 個相依性將無法與 CodeArtifact 搭配使用。

若要使用 CodeArtifact 在 Gemfile 中定義超過 500 個相依性,請將 Bundler 更新至 2.4.11 版或更新版本。

Bundler 操作支援

Bundler 使用兩種通訊協定之一來解析 Ruby Gem 套件相依性:精簡索引 API 或相依性 API。CodeArtifact 支援兩者。Bundler 2.4.11 和更新版本偏好精簡索引 API,如果無法使用,則會回到相依性 API;舊版只會使用相依性 API。RubyGems 3.5.19 和更新版本會在執行 時直接使用精簡索引 APIgem install

CodeArtifact 支援下列精簡索引端點:

  • GET /versions:使用完整版本清單傳回儲存庫中的每個 Gem。Bundler 和 RubyGems 使用此端點做為相依性解析的進入點。

  • GET /names:傳回儲存庫中的每個 Gem 名稱,依字母順序排序。

  • GET /info/gem-name:傳回單一 Gem 套件的版本、相依性和required-Ruby-version資訊。

/versions/names端點支援最多包含 5,000 個 Gem 套件的儲存庫。針對包含超過 5,000 個 Gem 套件之儲存庫的請求會傳回 HTTP 400 錯誤。

CodeArtifact 也支援位於 的 Bundler Dependencies API/api/v1/dependencies。單一請求可以包含多個 Gem 名稱;如需多 Gem 請求如何針對您帳戶的每秒讀取請求配額加權的詳細資訊,請參閱 配額 in AWS CodeArtifact

由於 /versions和 會/names傳回儲存庫中每個 Gem 的資料,CodeArtifact 也會依傳回的 Gem 數目加權這些請求。即使 HTTP 請求率顯示為低,執行並行bundle installgem install 操作的 CI/CD 環境也可以受到調節。如果您在 Ruby Gem 套件解析期間遇到限流,請從單一 AWS 帳戶請求提高每秒讀取請求的配額。

如果您之前將 RubyGems 固定為低於 3.5.19 的版本,作為 CodeArtifact 相容性的解決方法,您現在可以移除該 PIN 並升級至最新版本。

CodeArtifact 不支援舊版 RubyGems 規格索引,包括 specs.4.8.gzlatest_specs.4.8.gzprerelease_specs.4.8.gz。這些被精簡索引 API 取代。

測試精簡索引支援

若要驗證精簡索引解析度是否與 CodeArtifact 儲存庫正常運作:

  1. 如果您先前將 RubyGems 釘選為低於 3.5.19 的版本,請移除接腳:

    gem update --system
  2. 驗證您的 RubyGems 和 Bundler 版本:

    gem --version # Should be 3.5.19 or higher bundle --version # Should be 2.4.11 or higher
  3. 針對 CodeArtifact 儲存庫gem install進行測試:

    gem install <gem-name> --source https://<domain>-<account-id>.d.codeartifact.<region>.amazonaws.com/ruby/<repo>/
  4. bundle install 使用詳細輸出進行測試,以確認正在使用精簡索引:

    bundle install --verbose 2>&1 | grep -i "compact\|/versions\|/info"

    您應該會看到對 /versions和 的請求,/info/<gem-name>而不是 /api/v1/dependencies