为 Ruby gem 代码库配置向 Artifact Registry 的身份验证

本页面介绍如何使用 Artifact Registry Ruby gem 代码库配置身份验证。

当您使用第三方应用连接到代码库时,您必须进行 Artifact Registry 身份验证。

您无需为 Cloud Build 或 Google Cloud 运行时环境(例如 Google Kubernetes Engine 和 Cloud Run)配置身份验证。

准备工作

  1. 如果目标代码库不存在, 请创建 Ruby gem 代码库
  2. 验证 Ruby 是否已安装。如需了解安装说明,请参阅设置 Ruby Google Cloud 教程
  3. 验证您使用的用户账号或服务帐号是否具有访问 代码库所需的权限
  4. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI: 初始化 Google Cloud CLI:

    gcloud init

    如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI

  5. (可选)为 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 代码库的调用,您必须 先 生成令牌 ,然后在发出 请求时将其与代码库的地址一起传递。令牌的有效期为一小时,必须每小时刷新一次。

对拉取请求进行身份验证

您可以在 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 密钥 。如需将凭据文件配置为在推送请求中向来源进行身份验证,请执行以下操作:

  1. 运行以下命令,生成 OAuth2 访问令牌:

    gcloud auth print-access-token

    此令牌充当 Artifact Registry 的 API 密钥。

  2. 更新凭据文件:

    1. 打开 ~/.gem/credentials,并为代码库添加一行。密钥是您的代码库网址,值是 Bearer,后跟您的令牌:

      :rubygems_api_key: RUBYGEMS_ORG_KEY
      https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY: Bearer OAUTH_TOKEN
      

      其中:

      • RUBYGEMS_ORG_KEYRubyGems.org 的 API 密钥。
      • LOCATION 是代码库的单区域或多区域 位置
      • PROJECT 是包含代码库的项目的 ID。
      • REPOSITORY 是代码库的 ID。
      • OAUTH_TOKEN 是您的 OAuth2 访问令牌。
    2. 推送您的 gem。请注意,您无需设置 GEM_HOST_API_KEY,因为您已在凭据文件中定义了该密钥。

      gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
      

使用 Bundler 进行身份验证

Ruby Bundler 管理一个或多个 gem 中的应用依赖项 。如需设置 Bundler,请执行以下操作:

  1. 将代码库的地址作为 source 添加到 gemfile 中:

    # Gemfile
    # <...>
    source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    
  2. 使用 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

后续步骤