本页面介绍如何配置与 Artifact Registry Ruby gem 代码库的身份验证。
当您使用第三方应用连接到代码库时,您必须进行 Artifact Registry 身份验证。
您无需为 Cloud Build 或 Google Cloud运行时环境(例如 Google Kubernetes Engine 和 Cloud Run)配置身份验证。
准备工作
- 如果目标代码库不存在,请创建 Ruby gem 代码库。
- 验证是否已安装 Ruby。如需查看安装说明,请参阅Google Cloud 有关设置 Ruby 的教程。
- 验证您使用的用户账号或服务账号是否具有访问代码库所需的权限。
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
- (可选)为 gcloud CLI 命令配置默认值。
概览
Ruby 支持两种方法来对向 Artifact Registry 代码库发出的请求进行身份验证:
- RubyGems CLI:支持推送和拉取请求。此 CLI 默认随 Ruby 提供。使用 RubyGems 进行身份验证时,您每次向代码库发出推送或拉取请求时都必须进行身份验证。
Bundler CLI:支持拉取请求。Bundler 会将软件包和上游存储在 Gemfile 中,这样用户就可以在多台机器上标准化设置,而无需对每个单独的拉取请求进行身份验证。不过,您仍需偶尔重新向 Bundler 验证凭据。
如需安装 Bundler CLI,请输入
gem install bundler。
使用 RubyGems CLI 进行身份验证
RubyGems CLI 使用 OAuth2 令牌对请求进行身份验证。如需将 OAuth2 令牌传递给对 Artifact Registry 代码库的调用,您必须先生成令牌,然后在发出请求时将其与代码库的地址一起传递。令牌的有效期为 1 小时,必须每小时刷新一次。
对拉取请求进行身份验证
您可以在 Google Cloud CLI 命令行中或通过更新 .gemrc 文件来对拉取请求进行身份验证。
在命令行中对拉取请求进行身份验证
如需对拉取请求中的最新版 gem 进行身份验证,请运行以下命令:
export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
gem install GEM_NAME --source https://$GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
如需针对特定 gem 版本进行身份验证,请将 -v GEM_VERSION 添加到 gem install 命令。
其中:
- GEM_NAME 是相应请求所针对的 gem 的名称。
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT 是包含代码库的项目的 ID。
- REPOSITORY 是代码库的 ID。
在 .gemrc 文件中进行身份验证
您可以配置全局或项目特定的 /.gemrc 文件,以通过添加以下内容来对拉取请求中的来源进行身份验证:
# File: ~/.gemrc
# Use the GEM_TOKEN retrieved from export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
<...>
:sources:
- https://GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPO/
<...>
如需使用 /.gemrc 文件中定义的来源安装 gem,请运行以下命令:
gem install GEM_NAME
对推送请求进行身份验证
您可以在 Google Cloud CLI 命令行中或通过更新凭据文件来对推送请求进行身份验证。
在命令行中对推送请求进行身份验证
如需对推送请求进行身份验证,请运行以下命令:
export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
其中:
- GEM_NAME 是相应请求所针对的 gem 的名称。
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT 是包含代码库的项目的 ID。
- REPOSITORY 是代码库的 ID。
在凭据文件中对推送请求进行身份验证
gem 命令行工具使用 ~/.gem/credentials 文件来存储用于推送和拉取 gem 的 API 密钥。如需将凭据文件配置为在推送请求中向来源进行身份验证,请执行以下操作:
运行以下命令,生成 OAuth2 访问令牌:
gcloud auth print-access-token此令牌充当 Artifact Registry 的 API 密钥。
更新凭据文件:
打开
~/.gem/credentials并为您的代码库添加一行代码。键是您的代码库网址,值是Bearer,后跟您的令牌::rubygems_api_key: RUBYGEMS_ORG_KEY https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY: Bearer OAUTH_TOKEN其中:
- RUBYGEMS_ORG_KEY 是
RubyGems.org的 API 密钥。 - LOCATION 是代码库的单区域或多区域位置。
- PROJECT 是包含代码库的项目的 ID。
- REPOSITORY 是代码库的 ID。
- OAUTH_TOKEN 是您的 OAuth2 访问令牌。
- RUBYGEMS_ORG_KEY 是
推送 Gem。请注意,您无需设置
GEM_HOST_API_KEY,因为您已在凭据文件中定义了密钥。gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
使用 Bundler 进行身份验证
Ruby Bundler 可跨一个或多个 gem 管理应用依赖项。如需设置 Bundler,请执行以下操作:
在 Gemfile 中将代码库的地址添加为
source:# Gemfile # <...> source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"使用
bundle config向代码库进行身份验证:export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)" export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY" bundle config $HOST $GEM_TOKEN
其中:
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT 是项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
- REPOSITORY 是代码库的 ID。如果您配置了默认 Artifact Registry 代码库,则当您从命令中省略此标志时,系统会使用该代码库。
您需要偶尔重新对远程代码库进行身份验证。在这种情况下,请运行第 2 步中的同一身份验证命令。
如需详细了解如何配置 Bundler,请参阅 bundler.io 文档中的 Gemfiles。