

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

# 配置 RubyGems 和使用 Bundler CodeArtifact
<a name="configure-use-rubygems-bundler"></a>

在中创建存储库后 CodeArtifact，可以使用 RubyGems (`gem`) 和 Bundler (`bundle`) 来安装和发布 gem。本主题介绍如何配置包管理器以使用存储库进行身份验证和使用 CodeArtifact 存储库。

## 使用配置 RubyGems (`gem`) 和捆绑器 (`bundle`) CodeArtifact
<a name="configure-ruby-gem"></a>

要使用 RubyGems (`gem`) 或 Bundler (`bundle`) 将 gem 发布到或使用其中的宝石 AWS CodeArtifact，您首先需要使用 CodeArtifact 存储库信息（包括访问它的凭据）对其进行配置。按照以下步骤之一中的步骤，使用您的 CodeArtifact 存储库终端节点信息和凭据配置和 `bundle` CLI 工具。`gem`

### 使用控制台说明进行配置 RubyGems 和捆绑器
<a name="configure-ruby-gem-console"></a>

您可以使用控制台中的配置说明将 Ruby 包管理器连接到 CodeArtifact 存储库。控制台说明提供了自定义命令，您可以运行这些命令来设置软件包管理器，而无需查找和填写您的 CodeArtifact 信息。

1. 在 [https://console.aws.amazon.com/codesuite/codeartifact](https://console.aws.amazon.com/codesuite/codeartifact/home) /hom AWS CodeArtifact e 打开控制台。

1. 在导航窗格中，选择**存储库**，然后选择要用于安装或发布 Ruby Gem 的存储库。

1. 选择**查看连接说明**。

1. 选择操作系统。

1. 选择要在 CodeArtifact 存储库中配置的 Ruby 包管理器客户端。

1. 按照生成的说明来配置程序包管理器客户端，以便从存储库安装 Ruby Gem 或将 Ruby Gem 发布到存储库。

### 手动配置 RubyGems 和捆绑器
<a name="configure-ruby-gem-manual"></a>

如果您无法或不想使用控制台中的配置说明，则可以按照以下说明手动将 Ruby 包管理器连接到 CodeArtifact 存储库。

1. 在命令行中，使用以下命令获取 CodeArtifact 授权令牌并将其存储在环境变量中。
   + {{my\_domain}}用您的 CodeArtifact 域名替换。
   + {{111122223333}}替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [Cross-account 域名](domain-overview.md#domain-overview-cross-account)。

------
#### [ macOS and Linux ]

   ```
   export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text`
   ```

------
#### [ Windows ]
   + Windows（使用默认命令 shell）：

     ```
     for /f %i in ('aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text') do set CODEARTIFACT_AUTH_TOKEN=%i
     ```
   + 窗户 PowerShell：

     ```
     $env:CODEARTIFACT_AUTH_TOKEN = aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text
     ```

------

1. 要将 Ruby gem 发布到您的存储库，请使用以下命令获取 CodeArtifact 存储库的端点并将其存储在`RUBYGEMS_HOST`环境变量中。`gem` CLI 使用此环境变量来确定 Gem 的发布位置。
**注意**  
或者，您可以不使用 `RUBYGEMS_HOST` 环境变量，而是在使用 `gem push` 命令时为存储库端点提供 `--host` 选项。
   + {{my\_domain}}用您的 CodeArtifact 域名替换。
   + {{111122223333}}替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [Cross-account 域名](domain-overview.md#domain-overview-cross-account)。
   + {{my\_repo}}替换为您的 CodeArtifact 存储库名称。

------
#### [ macOS and Linux ]

   ```
   export RUBYGEMS_HOST=`aws codeartifact get-repository-endpoint --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}} --format ruby --query repositoryEndpoint --output text | sed 's:/*$::'`
   ```

------
#### [ Windows ]

   以下命令可检索存储库端点，去除尾部 `/`，然后将其存储在一个环境变量中。
   + Windows（使用默认命令 shell）：

     ```
     for /f %i in ('aws codeartifact get-repository-endpoint --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}} --format ruby --query repositoryEndpoint --output text') do set RUBYGEMS_HOST=%i
                                     
     set RUBYGEMS_HOST=%RUBYGEMS_HOST:~0,-1%
     ```
   + 窗户 PowerShell：

     ```
     $env:RUBYGEMS_HOST = (aws codeartifact get-repository-endpoint --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}} --format ruby --query repositoryEndpoint --output text).TrimEnd("/")
     ```

------

   以下 URL 是一个示例存储库端点：

   ```
   https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/ruby/{{my_repo}}/
   ```
**注意**  
要使用双堆栈端点，请使用 `codeartifact.{{region}}.on.aws` 端点。

1. 要将 Ruby gem 发布到您的存储库，您必须 RubyGems 通过编辑`~/.gem/credentials`文件 CodeArtifact 以包含您的身份验证令牌来进行身份验证。如果 `~/.gem/` 目录或 `~/.gem/credentials` 文件不存在，则创建该目录和文件。

------
#### [ macOS and Linux ]

   ```
   echo ":codeartifact_api_key: Bearer $CODEARTIFACT_AUTH_TOKEN" >> ~/.gem/credentials
   ```

------
#### [ Windows ]
   + Windows（使用默认命令 shell）：

     ```
     echo :codeartifact_api_key: Bearer %CODEARTIFACT_AUTH_TOKEN% >> %USERPROFILE%/.gem/credentials
     ```
   + 窗户 PowerShell：

     ```
     echo ":codeartifact_api_key: Bearer $env:CODEARTIFACT_AUTH_TOKEN" | Add-Content ~/.gem/credentials
     ```

------

1. 要使用 `gem` 从存储库安装 Ruby Gem，必须将存储库端点信息和身份验证令牌添加到 `.gemrc` 文件。您可以将其添加到全局文件（`~/.gemrc`）或项目 `.gemrc` 文件。您必须向中添加的 CodeArtifact 信息`.gemrc`是存储库端点和身份验证令牌的组合。它的格式如下：

   ```
   https://aws:${CODEARTIFACT_AUTH_TOKEN}@{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/ruby/{{my_repo}}/
   ```
   + 对于身份验证令牌，您可以使用在上一步中设置的 `CODEARTIFACT_AUTH_TOKEN` 环境变量。
   + 要获取存储库端点，您可以读取之前设置的 `RUBYGEMS_HOST` 环境变量的值，也可以使用以下 `get-repository-endpoint` 命令根据需要替换这些值：

     ```
     aws codeartifact get-repository-endpoint --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}} --format ruby --query repositoryEndpoint --output text
     ```

   获取端点后，使用文本编辑器在适当位置添加 `aws:${CODEARTIFACT_AUTH_TOKEN}@`。创建存储库端点和身份验证令牌字符串后，使用 `echo` 命令将其添加到 `.gemrc` 文件的 `:sources:` 部分，具体操作如下：
**警告**  
CodeArtifact 不支持使用`gem sources -add`命令将存储库添加为源。必须将源直接添加到文件。

------
#### [ macOS and Linux ]

   ```
   echo ":sources:
       - https://aws:${CODEARTIFACT_AUTH_TOKEN}@{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/ruby/{{my_repo}}/" > ~/.gemrc
   ```

------
#### [ Windows ]
   + Windows（使用默认命令 shell）：

     ```
     echo ":sources:
         - https://aws:%CODEARTIFACT_AUTH_TOKEN%@{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/ruby/{{my_repo}}/" > "%USERPROFILE%\.gemrc"
     ```
   + 窗户 PowerShell：

     ```
     echo ":sources:
         - https://aws:$env:CODEARTIFACT_AUTH_TOKEN@{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/ruby/{{my_repo}}/" | Add-Content ~/.gemrc
     ```

------

1. 要使用 Bundler，必须通过运行以下 `bundle config` 命令，使用存储库端点 URL 和身份验证令牌来配置 Bundler：

------
#### [ macOS and Linux ]

   ```
   bundle config $RUBYGEMS_HOST aws:$CODEARTIFACT_AUTH_TOKEN 
   ```

------
#### [ Windows ]
   + Windows（使用默认命令 shell）：

     ```
     bundle config %RUBYGEMS_HOST% aws:%CODEARTIFACT_AUTH_TOKEN%
     ```
   + 窗户 PowerShell：

     ```
     bundle config $Env:RUBYGEMS_HOST aws:$Env:CODEARTIFACT_AUTH_TOKEN
     ```

------

现在，您已经在存储库中配置了 RubyGems (`gem``bundle`) 和 Bundler ()，您可以使用它们来发布和使用 CodeArtifact 存储库中的 Ruby gem。

## 从中安装 Ruby 宝石 CodeArtifact
<a name="install-ruby-gems"></a>

使用以下过程使用`gem`或 `bundle` CLI 工具从 CodeArtifact 存储库中安装 Ruby gem。

### 使用 `gem` 安装 Ruby Gem
<a name="install-ruby-gems-gem"></a>

您可以使用 RubyGems (`gem`) CLI 从 CodeArtifact 存储库中快速安装特定版本的 Ruby gem。

**使用以下命令从 CodeArtifact 存储库安装 Ruby gem `gem`**

1. 如果还没有，请按照中的步骤[使用配置 RubyGems (`gem`) 和捆绑器 (`bundle`) CodeArtifact](#configure-ruby-gem)将 `gem` CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。
**注意**  
生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时，则需要创建一个新的令牌。

1. 使用以下命令从以下位置安装 Ruby gem CodeArtifact：

   ```
   gem install {{my_ruby_gem}} --version {{1.0.0}}
   ```

### 使用 `bundle` 安装 Ruby Gem
<a name="install-ruby-gems-bundle"></a>

可以使用 Bundler（`bundle`）CLI 来安装已在 `Gemfile` 中配置的 Ruby Gem。

**使用以下命令从 CodeArtifact 存储库安装 Ruby gem `bundle`**

1. 如果还没有，请按照中的步骤[使用配置 RubyGems (`gem`) 和捆绑器 (`bundle`) CodeArtifact](#configure-ruby-gem)将 `bundle` CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。
**注意**  
生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时，则需要创建一个新的令牌。

1. 将您的 CodeArtifact 存储库终端节点 URL 添加到 a 中，`source`以便从您的`Gemfile` CodeArtifact 存储库及其上游安装已配置的 Ruby gem。

   ```
   source "https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/ruby/{{my_repo}}/"
                   
   gem 'my_ruby_gem'
   ```

1. 使用以下命令，按照 `Gemfile` 中的说明来安装 Ruby Gem：

   ```
   bundle install
   ```

## 将 Ruby 宝石发布到 CodeArtifact
<a name="publish-ruby-gems-gem"></a>

使用以下过程通过 `gem` CLI 将 Ruby gem 发布到 CodeArtifact 存储库。

1. 如果还没有，请按照中的步骤[使用配置 RubyGems (`gem`) 和捆绑器 (`bundle`) CodeArtifact](#configure-ruby-gem)将 `gem` CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。
**注意**  
生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时，则需要创建一个新的令牌。

1. 使用以下命令将 Ruby gem 发布到 CodeArtifact 存储库。请注意，如果您未设置`RUBYGEMS_HOST`环境变量，则必须在`--host`选项中提供存储 CodeArtifact 库终端节点。

   ```
   gem push --key codeartifact_api_key {{my_ruby_gem-0.0.1.gem}}
   ```