View a markdown version of this page

Bundler 兼容性 - CodeArtifact

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Bundler 兼容性

本指南包含有关与 Bundler CodeArtifact 的兼容性的信息。

Bundler 兼容性

AWS CodeArtifact 推荐 Bundler 2.4.11 或更高版本。如果在安装时遇到问题,请将 Bundler CLI 更新到最新版本。

Bundler 版本支持

对于低于 2.4.11 的 Bundler 版本,在 Bundler 决定查询完整索引 specs.4.8.gz 之前,Gemfile 中可定义的依赖项上限为 500 个。由于 CodeArtifact 不支持完整索引,因此在使用低于 2.4.11 的 Bundler 版本 CodeArtifact 时,指定超过 500 个依赖项将不起作用。

要使用在 Gemfile 中定义 500 个以上的依赖关系 CodeArtifact,请将 Bundler 更新到 2.4.11 或更高版本。

Bundler 操作支持

Bundler 使用以下两种协议之一来解析 Ruby gem 依赖关系:压缩索引 API 或依赖项 API。 CodeArtifact 两者都支持。Bundler 2.4.11 及更高版本更喜欢压缩索引 API,如果依赖项 API 不可用,则回退到依赖项 API;早期版本仅使用依赖项 API。 RubyGems 3.5.19 及更高版本在运行时直接使用压缩索引 API。gem install

CodeArtifact 支持以下压缩索引端点:

  • GET /versions: 返回存储库中的每个 gem 及其完整版本列表。Bundler 并 RubyGems 使用此端点作为依赖关系解析的入口点。

  • GET /names: 返回存储库中的每个 gem 名称,按字母顺序排序。

  • GET /info/gem-name: 返回单个 Gem 的版本、依赖关系和必填Ruby-version 信息。

/versions/names端点支持最多包含 5,000 颗宝石的存储库。针对包含 5,000 个以上宝石的存储库发出的请求会返回 HTTP 400 错误。

CodeArtifact 还支持 Bundler 依赖关系 API,网址为/api/v1/dependencies。单个请求可以包含多个 Gem 名称;有关如何根据账户的每秒读取请求配额对多 Gem 请求进行权重的详细信息,请参阅中的配额 AWS CodeArtifact

因为/versions/names返回存储库中每个 gem 的数据, CodeArtifact 还会根据返回的 gem 数量对这些请求进行加权。 CI/CD即使 HTTP 请求速率显得很低,也可以限制并行运行的环境bundle installgem install操作。如果您在 Ruby Gem 解析期间遇到限制,请申请增加单个 AWS 账户每秒读取请求的配额。

如果您之前固定 RubyGems 到低于 3.5.19 的版本作为 CodeArtifact 兼容性解决方法,则现在可以移除该 pin 并升级到最新版本。

CodeArtifact 不支持旧版 RubyGems 规范索引,包括specs.4.8.gzlatest_specs.4.8.gz、和prerelease_specs.4.8.gz。它们已被 Compact Index API 所取代。

正在测试压缩索引支持

要验证压缩索引解析是否适用于您的 CodeArtifact 存储库,请执行以下操作:

  1. 如果您之前固定 RubyGems 到低于 3.5.19 的版本,请移除该引脚:

    gem update --system
  2. 验证您的 RubyGems 和捆绑器版本:

    gem --version # Should be 3.5.19 or higher bundle --version # Should be 2.4.11 or higher
  3. gem install针对您的 CodeArtifact 存储库进行测试:

    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